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

Метод scalars

Метод scalars класса Session выполняет SQL-выражение или ORM-запрос и возвращает объект ScalarResult, который отдаёт значения первой колонки результата как скаляры, а не как строки-кортежи. Первым параметром метод принимает выполняемое выражение или запрос, вторым - параметры привязки. Метод удобен, когда запрос выбирает одну колонку или одну ORM-сущность и нужно получить плоский список значений.

Синтаксис

Session.scalars(statement, [params])

Пример

Давайте выполним простой SQL-запрос через text и получим скалярные значения:

from sqlalchemy import create_engine, text from sqlalchemy.orm import Session engine = create_engine('sqlite:///:memory:') with Session(engine) as sess: res = sess.scalars(text('SELECT 1 UNION SELECT 2 UNION SELECT 3')) print(list(res))

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

[1, 2, 3]

Пример

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

from sqlalchemy import create_engine, String, select from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as sess: sess.add_all([ Article(title='article 1'), Article(title='article 2'), Article(title='article 3'), ]) sess.commit() res = sess.scalars(select(Article.title).order_by(Article.id)) print(list(res))

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

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

Пример

Давайте извлечём ORM-объекты целиком через scalars и обратимся к их атрибутам:

from sqlalchemy import create_engine, select, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) status: Mapped[str] = mapped_column(String(50)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as sess: sess.add_all([ Article(title='article 1', status='published'), Article(title='article 2', status='draft'), ]) sess.commit() res = sess.scalars(select(Article).order_by(Article.id)) for article in res: print(article.title, '-', article.status)

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

"article 1 - published" "article 2 - draft"

Пример

Давайте используем scalars для получения единственного значения методом first:

from sqlalchemy import create_engine, select, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as sess: sess.add(Article(title='article')) sess.commit() res = sess.scalars(select(Article.title)).first() print(res)

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

"article"

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

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