@SushkaCraftHabr

Ошибка sqlite3.IntegrityError: UNIQUE constraint failed: order_id.ID. Как исправить?

Вот код -
import sqlite3

con = sqlite3.connect('order_id.db')
cur = con.cursor()

try:
	name = input('Введите имя: ')
	surname = input('Введите фамилию: ')
	contact = input('Введите ссылку на соц. сеть\n(без протакола\\без https://): ')
	date = input('Введите дату бронирования\n(в формате дд-мм-гггг): ')
	contact_ids = contact.split('/')[1]
	phone = input('Введите номер телефона\n(без +, например 79007009020): ')
except IndexError:
	pass

cur.execute("SELECT * FROM order_id")
ids = cur.lastrowid
cur.execute(f"INSERT INTO order_id VALUES ('{ids}', '{date}', '{name}', '{surname}', '{contact}', '{contact_ids}', '{phone}')") #20 Строчка
con.commit()
print("Data save!")


Вроде бы он работает, но когда я в первый раз ввожу данные, то во все последующие разы выводится ошибка -
File "F:\git\VIP-pass-ticket\Main.py", line 20, in <module>
    cur.execute(f"INSERT INTO order_id VALUES ('{ids}', '{date}', '{name}', '{surname}', '{contact}', '{contact_ids}', '{phone}')")
sqlite3.IntegrityError: UNIQUE constraint failed: order_id.ID

Если я не ошибаюсь, то ошибку можно исправить переписав код без использования F-строк, но давненько не работал с SQLite3 и не помню как это сделать.
  • Вопрос задан
  • 2823 просмотра
Решения вопроса 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Если я не ошибаюсь, то ошибку можно исправить переписав код без использования F-строк, но давненько не работал с SQLite3 и не помню как это сделать.

C помощью подстановочных значений. О том как это сделать - смотрите в документации там куча примеров.
Что касательно ошибки - значение поля id не может повторяться, но вы пытаетесь добавить уже существующее значение. Чаще всего, и ваш случай не исключение, как я понял, уникальными делаю первичные ключи (они-же id`шники). В таких случаях их делают авто-иникрементируемыми и при добавлении данных данное поле пропускают, указывая только нужные поля (примеры тут в главе посвященной собственно insert).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы