Метод execute
Метод execute класса AsyncSession выполняет
SQL-выражение или ORM-запрос в асинхронном режиме.
Первым параметром метод принимает выражение - объект
select, insert, update, delete
или текст SQL через text. Вторым необязательным
параметром передаются параметры запроса в виде словаря.
Метод является корутиной, поэтому вызывается через
await и возвращает объект Result, из которого
извлекаются строки, скаляры или ORM-объекты.
Синтаксис
await session.execute(statement, [params])
Пример
Давайте выполним простой SQL-запрос через text
и получим строки результата:
from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
engine = create_async_engine('sqlite+aiosqlite:///:memory:')
async def main():
async with AsyncSession(engine) as session:
res = await session.execute(text('SELECT 1 AS num'))
print(res.fetchall())
import asyncio
asyncio.run(main())
Результат выполнения кода:
[(1,)]
Пример
Давайте выполним ORM-запрос select по модели
Article и получим ORM-объекты:
from sqlalchemy import select
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
engine = create_async_engine('sqlite+aiosqlite:///:memory:')
async def main():
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
async with AsyncSession(engine) as session:
session.add(Article(title='article'))
await session.commit()
res = await session.execute(select(Article))
for article in res.scalars():
print(article.id, article.title)
import asyncio
asyncio.run(main())
Результат выполнения кода:
1 article
Пример
Давайте выполним запрос с параметрами через
text и передадим значения вторым аргументом:
from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
engine = create_async_engine('sqlite+aiosqlite:///:memory:')
async def main():
async with AsyncSession(engine) as session:
res = await session.execute(
text('SELECT :title AS title'),
{'title': 'article'}
)
print(res.fetchone())
import asyncio
asyncio.run(main())
Результат выполнения кода:
('article',)
Смотрите также
-
класс
AsyncSession,
который представляет асинхронную сессию -
метод
scalars,
который извлекает скалярные значения из результата -
метод
scalar,
который возвращает одно скалярное значение -
метод
commit,
который фиксирует изменения в базе данных