Метод get_transaction
Метод get_transaction класса AsyncSession
возвращает объект текущей транзакции,
связанной с асинхронной сессией.
Если активная транзакция отсутствует,
метод возвращает None.
Метод не принимает параметров
и не является асинхронным,
то есть вызывается без await.
Метод полезен, когда нужно проверить, была ли уже начата транзакция, прежде чем выполнять операции, требующие явного управления транзакцией.
Синтаксис
session.get_transaction()
Пример
Давайте создадим асинхронную сессию и проверим транзакцию до ее начала:
import asyncio
from sqlalchemy.ext.asyncio import (
create_async_engine,
AsyncSession
)
async def main():
engine = create_async_engine('sqlite+aiosqlite:///:memory:')
async with AsyncSession(engine) as session:
res = session.get_transaction()
print(res)
asyncio.run(main())
Результат выполнения кода:
None
Пример
Давайте начнем транзакцию методом begin
и получим ее через get_transaction:
import asyncio
from sqlalchemy.ext.asyncio import (
create_async_engine,
AsyncSession
)
async def main():
engine = create_async_engine('sqlite+aiosqlite:///:memory:')
async with AsyncSession(engine) as session:
async with session.begin():
res = session.get_transaction()
print(res)
asyncio.run(main())
Результат выполнения кода:
<sqlalchemy.orm.session.SessionTransaction object at 0x...>
Пример
Давайте проверим, что после завершения
транзакции метод снова возвращает None:
import asyncio
from sqlalchemy.ext.asyncio import (
create_async_engine,
AsyncSession
)
async def main():
engine = create_async_engine('sqlite+aiosqlite:///:memory:')
async with AsyncSession(engine) as session:
async with session.begin():
inside = session.get_transaction()
print(inside is not None)
after = session.get_transaction()
print(after)
asyncio.run(main())
Результат выполнения кода:
True
None
Смотрите также
-
класс
AsyncSession,
который представляет асинхронную сессию -
метод
begin,
который начинает транзакцию -
метод
commit,
который фиксирует транзакцию -
метод
rollback,
который откатывает транзакцию