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

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

Метод first класса Query возвращает первый объект из результата запроса. Если запрос не вернул ни одной строки, метод возвращает None. Метод не принимает параметров и автоматически добавляет к SQL-запросу ограничение LIMIT 1.

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

Синтаксис

Query.first()

Пример

Давайте создадим модель статьи и получим первую запись из таблицы:

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)) 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'), Article(title='article 3') ]) session.commit() res = session.query(Article).first() print(res.id, res.title)

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

"1 article 1"

Пример

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

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)) 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'), Article(title='article 3') ]) session.commit() res = session.query(Article).order_by(Article.id.desc()).first() print(res.id, res.title)

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

"3 article 3"

Пример

Давайте проверим, что метод возвращает 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)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add(Article(title='article 1')) session.commit() res = session.query(Article).filter_by(title='article 2').first() print(res)

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

"None"

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

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