Вот исправленный и дополненный код, объединяющий логику из вашего текста с подходом к работе с базой данных из предоставленного фото (использование функций, менеджера контекста 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("Неверный выбор. Пожалуйста, попробуйте снова.")