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

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

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

Синтаксис

Result.one()

Пример

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

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)')) conn.execute(text("INSERT INTO articles (id, title) VALUES (1, 'article')")) res = conn.execute(text('SELECT id, title FROM articles WHERE id = 1')) row = res.one() print(row)

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

(1, 'article')

Пример

Метод one можно использовать и с ORM-запросами через сессию. Давайте получим объект модели:

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column 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]
from sqlalchemy import create_engine, select from sqlalchemy.orm import Session from models import Article engine = create_engine('sqlite:///:memory:') with Session(engine) as session: session.add(Article(id=1, title='article', text='sqlalchemy', status='new', num=10)) session.commit() res = session.execute(select(Article).where(Article.id == 1)) article = res.one()[0] print(article.title)

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

"article"

Пример

Если строк больше одной, метод one выбрасывает исключение MultipleResultsFound:

from sqlalchemy import create_engine, text from sqlalchemy.exc import MultipleResultsFound engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)')) conn.execute(text("INSERT INTO articles (id, title) VALUES (1, 'article')")) conn.execute(text("INSERT INTO articles (id, title) VALUES (2, 'user')")) res = conn.execute(text('SELECT id, title FROM articles')) try: row = res.one() except MultipleResultsFound: print('multiple rows found')

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

"multiple rows found"

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

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