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

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

Метод scalars класса AsyncConnection выполняет SQL-запрос и возвращает объект ScalarResult, который является асинхронным итератором. В отличие от метода execute, который возвращает строки целиком, метод scalars извлекает только первый столбец каждой строки. Это удобно, когда запрос возвращает одно значение на строку. Первым параметром метод принимает SQL-выражение, вторым - необязательный словарь параметров. Метод является асинхронным, поэтому вызывается через await.

Синтаксис

await connection.scalars(statement, parameters)

Пример

Давайте создадим таблицу, заполним её и извлечём столбец заголовков через метод scalars:

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.begin() 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, text, status, num) " "VALUES ('article 1', 'text 1', 'draft', 10)" )) await conn.execute(text( "INSERT INTO articles (title, text, status, num) " "VALUES ('article 2', 'text 2', 'published', 20)" )) async with engine.connect() as conn: res = await conn.scalars(text('SELECT title FROM articles')) for title in res: print(title) await engine.dispose() asyncio.run(main())

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

article 1 article 2

Пример

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

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.begin() 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, text, status, num) " "VALUES ('article 1', 'text 1', 'draft', 10)" )) await conn.execute(text( "INSERT INTO articles (title, text, status, num) " "VALUES ('article 2', 'text 2', 'published', 20)" )) async with engine.connect() as conn: res = await conn.scalars( text('SELECT title FROM articles WHERE status = :status'), {'status': 'published'} ) for title in res: print(title) await engine.dispose() asyncio.run(main())

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

article 2

Пример

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

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.begin() 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, text, status, num) " "VALUES ('article 1', 'text 1', 'draft', 10)" )) await conn.execute(text( "INSERT INTO articles (title, text, status, num) " "VALUES ('article 2', 'text 2', 'published', 20)" )) async with engine.connect() as conn: res = await conn.scalars(text('SELECT num FROM articles')) total = sum(res) print(total) await engine.dispose() asyncio.run(main())

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

30

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

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