Метод first класса ScalarResult
Метод first класса ScalarResult возвращает
первую строку из результата запроса или None,
если результат пуст. Метод не принимает параметров.
Он удобен, когда нужно получить только одну запись
без проверки наличия остальных строк.
Синтаксис
ScalarResult.first()
Пример
Давайте создадим модель Article и получим
первую строку из таблицы articles:
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(100))
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.scalars(select(Article.title))
print(res.first())
Результат выполнения кода:
"article 1"
Пример
Давайте проверим поведение метода first,
когда результат запроса пуст:
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(100))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
res = session.scalars(select(Article.title))
print(res.first())
Результат выполнения кода:
None
Пример
Давайте получим первую строку с помощью метода
first и сравним её с результатом метода
all:
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(100))
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()
res = session.scalars(select(Article.title))
print(res.first())
print(res.all())
Результат выполнения кода:
"article 1"
['article 2']
Смотрите также
-
класс
ScalarResult,
который представляет результат скалярного запроса -
метод
all,
который возвращает все строки результата -
метод
one,
который возвращает ровно одну строку результата -
метод
one_or_none,
который возвращает одну строку или None