У меня была такая же проблема: sqlite3.IntegrityError
Как упоминалось во многих ответах, проблема в том, что соединение не было правильно закрыто.
В моем случае у меня было try
except
блоков. Я обращался к базе данных в блоке try
, и когда возникло исключение, я хотел сделать что-то еще в блоке except
.
try:
conn = sqlite3.connect(path)
cur = conn.cursor()
cur.execute('''INSERT INTO ...''')
except:
conn = sqlite3.connect(path)
cur = conn.cursor()
cur.execute('''DELETE FROM ...''')
cur.execute('''INSERT INTO ...''')
Однако при возникновении исключения соединение из блока try
имело , а не было закрыто .
Я решил это с помощью with
операторов внутри блоков.
try:
with sqlite3.connect(path) as conn:
cur = conn.cursor()
cur.execute('''INSERT INTO ...''')
except:
with sqlite3.connect(path) as conn:
cur = conn.cursor()
cur.execute('''DELETE FROM ...''')
cur.execute('''INSERT INTO ...''')