Метод execute класса AsyncConnection
Метод execute класса AsyncConnection
выполняет SQL-выражение или ORM-запрос
в асинхронном соединении с базой данных.
Первым параметром метод принимает SQL-выражение,
вторым - словарь параметров для подстановки.
Метод является асинхронным, поэтому вызывается
через await и возвращает объект результата.
Синтаксис
await conn.execute(statement, parameters)
Пример
Давайте создадим асинхронный движок и выполним
простой 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())
await engine.dispose()
asyncio.run(main())
Результат выполнения кода:
[(1,)]
Пример
Давайте создадим таблицу и вставим строку,
используя метод 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:
await conn.execute(text(
'CREATE TABLE articles ('
'id INTEGER PRIMARY KEY, '
'title TEXT, '
'text TEXT, '
'status TEXT, '
'num INTEGER)'
))
await conn.execute(
text('INSERT INTO articles (title, status, num) '
'VALUES (:title, :status, :num)'),
{'title': 'article', 'status': 'draft', 'num': 1}
)
await conn.commit()
res = await conn.execute(text('SELECT * FROM articles'))
print(res.fetchall())
await engine.dispose()
asyncio.run(main())
Результат выполнения кода:
[(1, 'article', None, 'draft', 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, '
'text TEXT, '
'status TEXT, '
'num INTEGER)'
))
await conn.execute(
text('INSERT INTO articles (title, num) '
'VALUES (:title, :num)'),
[{'title': 'article', 'num': 1},
{'title': 'user', 'num': 2}]
)
await conn.commit()
res = await conn.execute(
text('SELECT title FROM articles WHERE num > :n'),
{'n': 1}
)
print(res.fetchall())
await engine.dispose()
asyncio.run(main())
Результат выполнения кода:
[('user',)]
Смотрите также
-
класс
AsyncConnection,
который представляет асинхронное соединение с базой -
метод
commit,
который фиксирует текущую транзакцию -
метод
scalar,
который возвращает первое значение результата -
метод
exec_driver_sql,
который выполняет SQL-строку напрямую в драйвере