Класс AsyncConnection
Класс AsyncConnection представляет собой
асинхронное соединение с базой данных. Он
создается через метод connect объекта
AsyncEngine и используется внутри
конструкции async with. Соединение
позволяет выполнять SQL-запросы, управлять
транзакциями и получать результаты в
асинхронном режиме. Первым параметром при
создании передается асинхронный движок, а
сам объект поддерживает методы execute,
scalar, commit, rollback,
close и другие.
Синтаксис
AsyncConnection(engine)
Пример
Давайте создадим асинхронный движок и
откроем соединение с базой SQLite
в памяти:
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(conn)
asyncio.run(main())
Результат выполнения кода:
"<sqlalchemy.ext.asyncio.engine.AsyncConnection object at ...>"
Пример
Давайте выполним простой SQL-запрос через
метод execute асинхронного соединения:
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:
res = await conn.execute(text('SELECT 1'))
print(res.fetchall())
asyncio.run(main())
Результат выполнения кода:
[(1,)]
Пример
Давайте создадим таблицу и вставим в нее строку, используя асинхронное соединение с явным управлением транзакцией:
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(
'CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)'
))
await conn.execute(text(
"INSERT INTO articles (title) VALUES ('article')"
))
await conn.commit()
res = await conn.execute(text('SELECT id, title FROM articles'))
print(res.fetchall())
asyncio.run(main())
Результат выполнения кода:
[(1, 'article')]
Пример
Давайте откатим транзакцию через метод
rollback, чтобы изменения не попали
в базу данных:
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(
'CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)'
))
await conn.commit()
await conn.execute(text(
"INSERT INTO articles (title) VALUES ('article')"
))
await conn.rollback()
res = await conn.execute(text('SELECT COUNT(*) FROM articles'))
print(res.scalar())
asyncio.run(main())
Результат выполнения кода:
0
Пример
Давайте получим одно скалярное значение
через метод scalar асинхронного
соединения:
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:
res = await conn.scalar(text('SELECT 42'))
print(res)
asyncio.run(main())
Результат выполнения кода:
42