Метод limit класса Query
Метод limit класса Query ограничивает
количество строк, которые возвращает запрос.
Первым параметром метод принимает целое число -
максимальное количество записей в результате.
Метод возвращает новый объект Query,
который можно дальше модифицировать или выполнить.
Синтаксис
query.limit(limit)
Пример
Давайте создадим модель и получим только первые две статьи из базы данных:
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(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'),
Article(title='article 4'),
])
session.commit()
res = session.query(Article).limit(2).all()
for article in res:
print(article.title)
Результат выполнения кода:
"article 1"
"article 2"
Пример
Давайте объединим метод limit с методом
offset, чтобы пропустить первую запись
и получить следующие две:
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(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'),
Article(title='article 4'),
])
session.commit()
res = session.query(Article).offset(1).limit(2).all()
for article in res:
print(article.title)
Результат выполнения кода:
"article 2"
"article 3"
Пример
Давайте посмотрим, какой SQL-запрос генерирует
метод limit:
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(100))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
query = session.query(Article).limit(3)
print(query)
Итоговый SQL запрос:
SELECT articles.id AS articles_id, articles.title AS articles_title
FROM articles
LIMIT ? OFFSET ?