Чтобы внести ясность, я не спрашиваю, почему база данных заблокирована или как это предотвратить - это из-за DBBrowser. Я спрашиваю, есть ли способ предотвратить отмену изменений. Будь то напрямую через sqlite или каким-то другим способом ручного сохранения и повторной попытки каждой команды.
РЕДАКТИРОВАТЬ: для каждого запроса в комментариях, вот простой пример, который я проверил, чтобы убедиться. это было отбрасывание, как я и думал. Он просто увеличивает счетчик и перемещает его каждые 10 секунд. Через несколько секунд я открыл DBBrowser, чтобы он заблокировался, а затем закрыл его.
Код: Выделить всё
con = sqlite3.connect("test.db")
cur = con.cursor()
i = 0
while (True):
try:
cur.execute("INSERT INTO TestTable VALUES(?)", (i,))
con.commit()
print(f"committed i={i}")
except sqlite3.OperationalError as e:
traceback.print_exception(e)
i += 1
print(f"i={i}")
time.sleep(10)
Код: Выделить всё
committed i=0
i=1
committed i=1
i=2
committed i=2
i=3
committed i=3
i=4
Traceback (most recent call last):
File "l:\Coding\Python\sqlite3test\main.py", line 11, in
cur.execute("INSERT INTO TestTable VALUES(?)", (i,))
sqlite3.OperationalError: database is locked
i=5
Traceback (most recent call last):
File "l:\Coding\Python\sqlite3test\main.py", line 11, in
cur.execute("INSERT INTO TestTable VALUES(?)", (i,))
sqlite3.OperationalError: database is locked
i=6
committed i=6
i=7
committed i=7
i=8
Подробнее здесь: https://stackoverflow.com/questions/791 ... ng-changes