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

Метод scalar_one

Метод scalar_one класса Session выполняет SQL-запрос и возвращает ровно одно скалярное значение из первой колонки первой строки результата. Если запрос вернул ноль строк или больше одной строки, метод вызывает исключение. Первым параметром метод принимает объект запроса или SQL-выражение, дополнительными параметрами могут быть словарь параметров и опции выполнения.

Синтаксис

Session.scalar_one(statement, [params])

Пример

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

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

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

1

Пример

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

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

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

"article"

Пример

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

from sqlalchemy import create_engine, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import select class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) title: Mapped[str] = mapped_column(String) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1'), Article(title='article 2'), ]) session.commit() try: res = session.scalar_one(select(Article.id)) print(res) except Exception as exc: print(type(exc).__name__)

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

"MultipleResultsFound"

Пример

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

from sqlalchemy import create_engine, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import select class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) title: Mapped[str] = mapped_column(String) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: try: res = session.scalar_one(select(Article.id)) print(res) except Exception as exc: print(type(exc).__name__)

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

"NoResultFound"

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

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