Атрибут autocommit
Атрибут autocommit класса Session
возвращает текущий режим автоматической фиксации
транзакций. В современных версиях SQLAlchemy
данный атрибут всегда имеет значение False,
так как начиная с версии 2.0 поддержка
автоматической фиксации была полностью удалена.
Раньше этот атрибут позволял сессии автоматически
завершать транзакцию после каждого запроса.
Синтаксис
session.autocommit
Пример
Давайте создадим сессию и проверим значение
атрибута autocommit:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
print(session.autocommit)
Результат выполнения кода:
False
Пример
Давайте убедимся, что атрибут autocommit
не изменяется даже после выполнения запросов:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
session.execute(text('SELECT 1'))
print(session.autocommit)
Результат выполнения кода:
False
Пример
Давайте рассмотрим, как отсутствие автоматической
фиксации влияет на работу с данными. Создадим
таблицу и добавим запись, но не будем делать
commit:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
session.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title VARCHAR)'))
session.execute(text("INSERT INTO articles (title) VALUES ('article')"))
res = session.execute(text('SELECT * FROM articles')).fetchall()
print(res)
print(session.autocommit)
Результат выполнения кода:
[(1, 'article')]
False
Смотрите также
-
класс
Session,
который представляет сессию для работы с базой данных -
атрибут
autoflush,
который управляет автоматической синхронизацией с базой -
атрибут
expire_on_commit,
который управляет устареванием объектов после фиксации -
метод
commit,
который фиксирует текущую транзакцию