Метод execution_options класса AsyncEngine
Метод execution_options класса AsyncEngine
позволяет задать параметры выполнения
(execution options) для всех соединений,
которые будут созданы этим движком.
Метод принимает произвольный набор
именованных аргументов, например
isolation_level, synchronize_session,
stream_results. Возвращается новый
объект AsyncEngine, а исходный движок
не изменяется.
Этот метод удобно применять, когда нужно
один раз настроить режим выполнения
запросов для всего приложения, не передавая
параметры в каждый вызов execute.
Синтаксис
AsyncEngine.execution_options(**opt)
Пример
Давайте создадим асинхронный движок
для базы SQLite в памяти и зададим
параметр isolation_level:
import asyncio
from sqlalchemy import text
from sqlalchemy.ext.asyncio import create_async_engine
async def main():
engine = create_async_engine('sqlite+aiosqlite:///:memory:')
new_engine = engine.execution_options(isolation_level='SERIALIZABLE')
async with new_engine.connect() as conn:
res = await conn.execute(text('SELECT 1'))
print(res.scalar())
asyncio.run(main())
Результат выполнения кода:
1
Пример
Давайте убедимся, что исходный движок не изменяется, а метод возвращает новый объект:
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
async def main():
engine = create_async_engine('sqlite+aiosqlite:///:memory:')
new_engine = engine.execution_options(isolation_level='SERIALIZABLE')
print(engine is new_engine)
print(type(new_engine).__name__)
asyncio.run(main())
Результат выполнения кода:
False
"AsyncEngine"
Пример
Давайте применим метод к движку, который уже выполнял запросы, и зададим несколько параметров сразу:
import asyncio
from sqlalchemy import text
from sqlalchemy.ext.asyncio import create_async_engine
async def main():
engine = create_async_engine('sqlite+aiosqlite:///:memory:')
async with engine.connect() as conn:
await conn.execute(text('SELECT 1'))
new_engine = engine.execution_options(
isolation_level='SERIALIZABLE',
stream_results=True,
)
async with new_engine.connect() as conn:
res = await conn.execute(text('SELECT 1'))
print(res.scalar())
asyncio.run(main())
Результат выполнения кода:
1
Смотрите также
-
класс
AsyncEngine,
который представляет асинхронный движок базы данных -
метод
connect,
который открывает асинхронное соединение с базой -
метод
begin,
который начинает асинхронную транзакцию -
атрибут
sync_engine,
который возвращает синхронный движок