Атрибут sync_engine
Атрибут sync_engine класса AsyncEngine возвращает
синхронный движок Engine, который лежит в основе
асинхронного движка. Асинхронный движок не существует сам по
себе: внутри него всегда работает обычный синхронный движок,
который управляет пулом соединений и диалектом СУБД.
Атрибут sync_engine дает доступ к этому внутреннему
движку. Это полезно, когда нужно выполнить синхронную
операцию, получить информацию о диалекте или пуле соединений,
а также при работе с инструментами, которые ожидают обычный
Engine.
Атрибут не принимает параметров и доступен только для чтения.
Синтаксис
async_engine.sync_engine
Пример
Давайте создадим асинхронный движок для базы SQLite
в памяти и получим его синхронный движок:
from sqlalchemy.ext.asyncio import create_async_engine
async_engine = create_async_engine('sqlite+aiosqlite:///:memory:')
sync_engine = async_engine.sync_engine
print(sync_engine)
Результат выполнения кода:
"Engine(sqlite+aiosqlite:///:memory:)"
Пример
Давайте убедимся, что возвращаемый объект является экземпляром
синхронного класса Engine:
from sqlalchemy import Engine
from sqlalchemy.ext.asyncio import create_async_engine
async_engine = create_async_engine('sqlite+aiosqlite:///:memory:')
sync_engine = async_engine.sync_engine
print(isinstance(sync_engine, Engine))
Результат выполнения кода:
"True"
Пример
Давайте через синхронный движок получим информацию о диалекте и пуле соединений:
from sqlalchemy.ext.asyncio import create_async_engine
async_engine = create_async_engine('sqlite+aiosqlite:///:memory:')
sync_engine = async_engine.sync_engine
print(sync_engine.dialect.name)
print(sync_engine.pool)
Результат выполнения кода:
"sqlite"
"<sqlalchemy.pool.impl.AsyncAdaptedQueuePool object at ...>"
Пример
Давайте выполним синхронный SQL-запрос через движок из
атрибута sync_engine:
from sqlalchemy import text
from sqlalchemy.ext.asyncio import create_async_engine
async_engine = create_async_engine('sqlite+aiosqlite:///:memory:')
sync_engine = async_engine.sync_engine
with sync_engine.connect() as conn:
res = conn.execute(text('SELECT 1 AS num'))
print(res.fetchall())
Итоговый SQL запрос:
SELECT 1 AS num
Результат выполнения кода:
[(1,)]
Смотрите также
-
класс
AsyncEngine,
который представляет асинхронный движок базы данных -
атрибут
dialect,
который возвращает диалект асинхронного движка -
атрибут
pool,
который возвращает пул соединений асинхронного движка -
метод
dispose,
который закрывает пул соединений движка