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

Метод scalar класса Query

Метод scalar класса Query выполняет запрос и возвращает первое значение первой строки результата. Если строк нет, метод возвращает None. Метод удобен, когда запрос возвращает одно значение: например, при подсчете, получении максимума или выборке единственного столбца. Никаких параметров метод не принимает.

Синтаксис

Query.scalar()

Пример

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

from sqlalchemy import create_engine, Integer, 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(50)) text: Mapped[str] = mapped_column(String(200)) status: Mapped[str] = mapped_column(String(20)) num: Mapped[int] = mapped_column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1', text='text 1', status='active', num=1), Article(title='article 2', text='text 2', status='active', num=2), Article(title='article 3', text='text 3', status='draft', num=3) ]) session.commit() res = session.query(Article.title).scalar() print(res)

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

"article 1"

Пример

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

<+python+> from sqlalchemy import create_engine, Integer, String, func 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(50)) text: Mapped[str] = mapped_column(String(200)) status: Mapped[str] = mapped_column(String(20)) num: Mapped[int] = mapped_column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1', text='text 1', status='active', num=1), Article(title='article 2', text='text 2', status='active', num=2), Article(title='article 3', text='text 3', status='draft', num=3) ]) session.commit() res = session.query(func.count(Article.id)).scalar() print(res) <-python+>

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

<+python+> 3 <-python+>

Пример

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

<+python+> from sqlalchemy import create_engine, Integer, 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(50)) text: Mapped[str] = mapped_column(String(200)) status: Mapped[str] = mapped_column(String(20)) num: Mapped[int] = mapped_column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1', text='text 1', status='active', num=1), Article(title='article 2', text='text 2', status='active', num=2), Article(title='article 3', text='text 3', status='draft', num=3) ]) session.commit() res = session.query(Article.title).filter(Article.num == 2).scalar() print(res) <-python+>

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

<+python+> "article 2" <-python+>

Пример

Давайте проверим, что метод scalar возвращает None, если запрос не нашел ни одной строки:

<+python+> from sqlalchemy import create_engine, Integer, 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(50)) text: Mapped[str] = mapped_column(String(200)) status: Mapped[str] = mapped_column(String(20)) num: Mapped[int] = mapped_column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add(Article(title='article 1', text='text 1', status='active', num=1)) session.commit() res = session.query(Article.title).filter(Article.num == 100).scalar() print(res) <-python+>

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

<+python+> None <-python+>

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

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