Включить режим autocommit в модуле sqlite3.
Базовая библиотека sqlite3 по умолчанию работает в режиме автоматической фиксации, а
модуль sqlite3
в Python по умолчанию - нет.
Режим autocommit
означает, что операторы, которые изменяют базу данных, вступают в силу немедленно. Оператор
BEGIN
или
SAVEPOINT
отключает режим автоматической фиксации
autocommit
, а команда
COMMIT
,
ROLLBACK
или
RELEASE
, которая завершает внешнюю транзакцию, снова включает режим автоматической фиксации.
Модуль sqlite3
в Python по умолчанию выдает оператор BEGIN
неявно перед оператором языка DML - модификации данных, т. е. INSERT
/UPDATE
/DELETE
/REPLACE
.
Описанное поведение можно контролировать, какой тип операторов BEGIN
sqlite3 выполняется неявно, с помощью параметра isolation_level
в вызове функции sqlite3.connect()
или с помощью свойства соединений connection.isolation_level
. Если не указать isolation_level
, то будет используется простой BEGIN
, что эквивалентно указанию isolation_level=DEFERRED
. Другие возможные значения являются IMMEDIATE
и EXCLUSIVE
.
Можно отключить неявное управление транзакциями в модуле sqlite3
, установив значение уровня изоляции на None
. Это заставит базовую библиотеку sqlite3
работать в режиме автоматической фиксации. После этих действий можно полностью контролировать состояние транзакции, явно выполняя в своем SQL коде операторы BEGIN
, ROLLBACK
, SAVEPOINT
и RELEASE
.
Примеры использования:
Проще говоря, что бы включить autocommit
необходимо соединяться с базой данных SQLite3 следующим образом.
import sqlite3
connect = sqlite3.connect(path_db)
# эта строка включает autocommit
connect.isolation_level = None
with connect:
try:
cur = connect.execute('INSERT/UPDATE ....')
except sqlite3.Error as e:
print(e)
print(cur.lastrowid)