Todo list in postgres (python)

Python
import subprocess

def run_sql(query):
    subprocess.run(["psql", "todo_app", "-c", query])

def run_sql_block(sql_block):
    subprocess.run(["psql", "todo_app"], input=sql_block.encode())

def create_db():
    subprocess.run(["createdb", "todo_app"], stderr=subprocess.DEVNULL)

def create_table():
    run_sql("""
    CREATE TABLE IF NOT EXISTS todos (
        id SERIAL PRIMARY KEY,
        title TEXT NOT NULL,
        completed BOOLEAN DEFAULT FALSE,
        created_at TIMESTAMP DEFAULT NOW(),
        completed_at TIMESTAMP
    );
    """)

def view_todos():
    run_sql("SELECT id, title, completed, created_at, completed_at FROM todos ORDER BY id;")

def add_todo():
    title = input("Enter title: ")
    run_sql(f"INSERT INTO todos (title) VALUES ('{title}');")
    view_todos()

def toggle_todo():
    id_ = input("Enter ID to toggle: ")
    sql_block = f"""
DO $$
BEGIN
  IF EXISTS (SELECT 1 FROM todos WHERE id = {id_} AND completed = FALSE) THEN
    UPDATE todos SET completed = TRUE, completed_at = NOW() WHERE id = {id_};
  ELSIF EXISTS (SELECT 1 FROM todos WHERE id = {id_} AND completed = TRUE) THEN
    UPDATE todos SET completed = FALSE, completed_at = NULL WHERE id = {id_};
  ELSE
    RAISE NOTICE 'Todo with ID % not found.', {id_};
  END IF;
END
$$;
"""
    run_sql_block(sql_block)
    view_todos()

def delete_todo():
    id_ = input("Enter ID to delete: ")
    run_sql(f"DELETE FROM todos WHERE id = {id_};")
    view_todos()
def main():
    create_db()
    create_table()

    print("Welcome to todo list in postgres (python)")
    view_todos()

    while True:
        print("\n1. View todos\n2. Add todo\n3. Toggle completed\n4. Delete todo\n5. Exit")
        choice = input("Choose an option: ")

        if choice == "1":
            view_todos()
        elif choice == "2":
            add_todo()
        elif choice == "3":
            toggle_todo()
        elif choice == "4":
            delete_todo()
        elif choice == "5":
            print("Goodbye!")
            break
        else:
            print("Invalid option.")

if __name__ == "__main__":
    main()