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

Метод one класса ScalarResult

Метод one класса ScalarResult возвращает ровно один скалярный результат из выборки. Если запрос вернул ноль строк или больше одной строки, метод возбуждает исключение. Метод не принимает параметров. Обычно применяется, когда по логике запроса результат гарантированно должен быть единственным: например, при выборке по первичному ключу или при агрегатных запросах.

Метод one вызывается у объекта ScalarResult, который возвращают методы scalars и scalar объекта Result.

Синтаксис

ScalarResult.one()

Пример

Давайте получим одну строку таблицы articles по первичному ключу и извлечём ее через метод one:

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

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

"article"

Пример

Давайте убедимся, что метод one возбуждает исключение, когда строк в выборке нет:

from sqlalchemy import create_engine, 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] text: Mapped[str] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: stmt = select(Article).where(Article.id == 1) try: res = session.execute(stmt).scalars().one() except Exception as e: print(type(e).__name__)

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

"NoResultFound"

Пример

Давайте убедимся, что метод one возбуждает исключение, когда строк в выборке больше одной:

from sqlalchemy import create_engine, 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] text: Mapped[str] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article', text='some text', status='published', num=1), Article(title='user', text='other text', status='draft', num=2), ]) session.commit() stmt = select(Article) try: res = session.execute(stmt).scalars().one() except Exception as e: print(type(e).__name__)

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

"MultipleResultsFound"

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

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