Метод fetch
Метод fetch класса Select задает
лимит на количество строк, которые вернет
база данных. Метод принимает один обязательный
параметр - целое число, определяющее
максимальное количество записей в результате.
В сгенерированном SQL-запросе это выражается
добавлением конструкции LIMIT.
Метод удобен, когда нужно получить только
первые несколько записей без ручного
написания SQL. Он работает совместно с
методом offset, который пропускает
заданное число строк перед выборкой.
Синтаксис
select(Model).fetch(count)
Пример
Давайте создадим таблицу 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(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'),
Article(title='article 4'),
Article(title='article 5'),
])
session.commit()
query = select(Article).fetch(3)
res = session.scalars(query).all()
for article in res:
print(article.title)
Результат выполнения кода:
"article 1"
"article 2"
"article 3"
Пример
Давайте посмотрим, какой SQL-запрос
генерирует метод fetch:
from sqlalchemy import create_engine, String, select
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] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
query = select(Article).fetch(5)
print(query)
Результат выполнения кода:
"SELECT articles.id, articles.title FROM articles LIMIT :param_1"