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

Метод scalar_one_or_none

Метод scalar_one_or_none класса Session выполняет запрос и возвращает первый столбец единственной строки результата. Если строк нет, метод возвращает None. Если строк больше одной, возбуждается исключение MultipleResultsFound. Метод не принимает параметров и вызывается на объекте результата, который вернул execute.

Синтаксис

Session.execute(statement).scalar_one_or_none()

Пример

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

from sqlalchemy import create_engine, 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] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article', text='some text', status='published', num=1 ) session.add(article) session.commit() res = session.execute( Article.__table__.select().where(Article.id == 1) ).scalar_one_or_none() print(res)

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

1

Пример

Если строк с таким условием нет, метод вернёт None:

from sqlalchemy import create_engine, 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] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: res = session.execute( Article.__table__.select().where(Article.id == 100) ).scalar_one_or_none() print(res)

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

None

Пример

Метод также можно применять к запросам, построенным через select, возвращая значение конкретной колонки:

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(50)) text: Mapped[str] = mapped_column(String(200)) status: Mapped[str] = mapped_column(String(20)) num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article', text='some text', status='published', num=5 ) session.add(article) session.commit() res = session.execute( select(Article.title).where(Article.num == 5) ).scalar_one_or_none() print(res)

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

"article"

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

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