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

Метод stream_scalars класса AsyncConnection

Метод stream_scalars класса AsyncConnection выполняет SQL-запрос и возвращает асинхронный итератор скалярных значений. В отличие от метода scalars, который загружает все строки сразу, метод stream_scalars отдаёт результаты по мере их поступления, что экономит память при работе с большими выборками. Первым параметром передаётся SQL-выражение или текст запроса, дополнительно можно передать параметры через params и настройки выполнения через execution_options.

Синтаксис

await connection.stream_scalars(statement, [params], [execution_options])

Пример

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

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 1'), ('article 2'), ('article 3')" )) await conn.commit() res = await conn.stream_scalars(text('SELECT title FROM articles')) async for title in res: print(title) await engine.dispose() asyncio.run(main())

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

article 1 article 2 article 3

Пример

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

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 1'), ('article 2'), ('article 3')" )) await conn.commit() res = await conn.stream_scalars( text('SELECT title FROM articles WHERE id > :min_id'), {'min_id': 1} ) async for title in res: print(title) await engine.dispose() asyncio.run(main())

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

article 2 article 3

Пример

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

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 1'), ('article 2'), ('article 3')" )) await conn.commit() res = await conn.stream_scalars(text('SELECT title FROM articles ORDER BY id')) print(await res.first()) await engine.dispose() asyncio.run(main())

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

"article 1"

Пример

Давайте соберём все значения потока в список через метод all:

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 1'), ('article 2'), ('article 3')" )) await conn.commit() res = await conn.stream_scalars(text('SELECT title FROM articles ORDER BY id')) print(await res.all()) await engine.dispose() asyncio.run(main())

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

['article 1', 'article 2', 'article 3']

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

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