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

Метод run_sync

Метод run_sync класса AsyncConnection позволяет выполнить синхронную функцию, принимающую в качестве аргумента объект Connection, внутри асинхронного соединения. Первым параметром метод принимает синхронную функцию, которая будет вызвана с объектом соединения. Это особенно полезно для вызова функций и методов SQLAlchemy, которые еще не имеют асинхронных аналогов, например, для работы с метаданными или инспекцией базы данных.

Синтаксис

await conn.run_sync(fn, *arg, **kw)

Пример

Давайте создадим асинхронный движок и выполним синхронную функцию, которая выводит тип соединения:

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

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

"Connection"

Пример

Давайте используем run_sync для создания таблиц через объект MetaData:

import asyncio from sqlalchemy import Table, Column, Integer, String, MetaData from sqlalchemy.ext.asyncio import create_async_engine metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String) ) async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.begin() as conn: await conn.run_sync(metadata.create_all) async with engine.connect() as conn: res = await conn.run_sync( lambda sync_conn: sync_conn.execute( articles.select() ).fetchall() ) print(res) await engine.dispose() asyncio.run(main())

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

[]

Пример

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

import asyncio from sqlalchemy import Table, Column, Integer, String, MetaData, insert, select from sqlalchemy.ext.asyncio import create_async_engine metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String) ) async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.begin() as conn: await conn.run_sync(metadata.create_all) await conn.run_sync( lambda sync_conn: sync_conn.execute( insert(articles).values(title='article') ) ) async with engine.connect() as conn: res = await conn.run_sync( lambda sync_conn: sync_conn.execute( select(articles.c.title) ).fetchall() ) print(res) await engine.dispose() asyncio.run(main())

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

[('article',)]

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

  • класс AsyncConnection,
    который представляет асинхронное соединение
  • метод execute,
    который выполняет SQL-запрос асинхронно
  • метод begin,
    который начинает транзакцию
  • метод exec_driver_sql,
    который выполняет SQL-запрос напрямую
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить