Загрузка данных


Вот исправленный и дополненный код, объединяющий логику из вашего текста с подходом к работе с базой данных из предоставленного фото (использование функций, менеджера контекста with и добавление id в таблицу):
import sqlite3

def init_db():
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS contacts (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT NOT NULL,
                phone TEXT NOT NULL,
                email TEXT
            )
        """)
        conn.commit()

def add_contact():
    name = input("Имя: ")
    phone = input("Телефон: ")
    email = input("Email: ")
    
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute(
            "INSERT INTO contacts (name, phone, email) VALUES (?, ?, ?)",
            (name, phone, email)
        )
        conn.commit()
    print("Контакт успешно добавлен.")

def show():
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM contacts")
        contacts = cursor.fetchall()
        
        if not contacts:
            print("Список контактов пуст.")
        else:
            for c in contacts:
                print(c)

def search():
    name = input("Имя для поиска: ")
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM contacts WHERE name = ?", (name,))
        results = cursor.fetchall()
        
        print(f"--- Результаты поиска для '{name}' ---")
        if not results:
             print("Контакты не найдены.")
        else:
            for r in results:
                print(r)

def update():
    name = input("Имя контакта для изменения: ")
    phone = input("Новый телефон: ")
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute("UPDATE contacts SET phone = ? WHERE name = ?", (phone, name))
        if cursor.rowcount > 0:
            print("Телефон успешно изменен.")
        else:
            print("Контакт не найден.")
        conn.commit()

def delete():
    name = input("Имя контакта для удаления: ")
    with sqlite3.connect("contacts.db") as conn:
        cursor = conn.cursor()
        cursor.execute("DELETE FROM contacts WHERE name = ?", (name,))
        if cursor.rowcount > 0:
             print("Контакт успешно удален.")
        else:
             print("Контакт не найден.")
        conn.commit()

# Инициализация базы данных при запуске
init_db()

while True:
    print("\n1. Добавить  2. Показать  3. Найти")
    print("4. Изменить телефон  5. Удалить  0. Выход")
    choice = input("Выбор: ")

    if choice == "1":
        add_contact()
    elif choice == "2":
        show()
    elif choice == "3":
        search()
    elif choice == "4":
        update()
    elif choice == "5":
        delete()
    elif choice == "0":
        break
    else:
        print("Неверный выбор. Пожалуйста, попробуйте снова.")