РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
549 of 711 menu

Метод raw_connection

Метод raw_connection класса AsyncEngine возвращает низкоуровневое соединение с базой данных из пула соединений. Метод является асинхронным, поэтому его следует вызывать через await. Параметров метод не принимает. Полученное соединение относится к драйверу СУБД и предоставляет доступ к его «сырому» API, минуя высокоуровневые абстракции SQLAlchemy.

Возвращаемый объект зависит от используемого диалекта. Для SQLite с драйвером aiosqlite это AsyncAdapt_aiosqlite_connection, для PostgreSQL с asyncpg - обертка над соединением asyncpg. Закрывать такое соединение нужно методом close, чтобы вернуть его обратно в пул.

Синтаксис

await engine.raw_connection()

Пример

Давайте получим низкоуровневое соединение и выведем его тип:

import asyncio from sqlalchemy.ext.asyncio import create_async_engine async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') conn = await engine.raw_connection() print(type(conn)) await conn.close() await engine.dispose() asyncio.run(main())

Результат выполнения кода:

"<class 'sqlalchemy.dialects.sqlite.aiosqlite.AsyncAdapt_aiosqlite_connection'>"

Пример

Давайте выполним SQL-запрос напрямую через курсор низкоуровневого соединения:

import asyncio from sqlalchemy.ext.asyncio import create_async_engine async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') conn = await engine.raw_connection() cursor = await conn.cursor() await cursor.execute('CREATE TABLE articles (id INTEGER, title TEXT)') await cursor.execute("INSERT INTO articles VALUES (1, 'article')") await cursor.execute('SELECT title FROM articles') res = await cursor.fetchall() print(res) await cursor.close() await conn.close() await engine.dispose() asyncio.run(main())

Результат выполнения кода:

[('article',)]

Пример

Давайте сравним объект, возвращаемый методом raw_connection, с обычным соединением из метода connect:

import asyncio from sqlalchemy.ext.asyncio import create_async_engine async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.connect() as conn: print(type(conn)) raw = await engine.raw_connection() print(type(raw)) await raw.close() await engine.dispose() asyncio.run(main())

Результат выполнения кода:

"<class 'sqlalchemy.ext.asyncio.engine.AsyncConnection'>" "<class 'sqlalchemy.dialects.sqlite.aiosqlite.AsyncAdapt_aiosqlite_connection'>"

Смотрите также

  • класс AsyncEngine,
    который представляет асинхронный движок базы данных
  • метод connect,
    который открывает высокоуровневое асинхронное соединение
  • метод begin,
    который открывает соединение и начинает транзакцию
  • атрибут sync_engine,
    который возвращает синхронный движок под асинхронным
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить