在 SQLAlchemy 中使用分页查询

2023-04-05 00:00:00 sqlalchemy 查询 分页

分页查询是在大规模数据集中常用的一种技术,它可以将大的数据集分割成小的部分,以便更快地查找和处理数据。在 SQLAlchemy 中,可以使用 limit()offset() 来实现分页查询。

假设我们有一个名为 Article 的模型类,它包含了文章的标题、内容和时间等属性,我们想要进行分页查询。

首先,我们需要安装 SQLAlchemy:

pip install SQLAlchemy

然后,我们需要导入需要的模块和类:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime

接下来,我们定义模型类:

Base = declarative_base()

class Article(Base):
    __tablename__ = 'article'

    id = Column(Integer, primary_key=True)
    title = Column(String(100))
    content = Column(String(5000))
    create_time = Column(DateTime)

然后,我们需要创建数据库连接和会话:

engine = create_engine('sqlite:///articles.db')
Base.metadata.create_all(engine)

DBSession = sessionmaker(bind=engine)
session = DBSession()

接下来,我们使用 limit()offset() 方法对查询进行分页操作:

PAGE_SIZE = 10
page = 1

articles = session.query(Article).order_by(Article.create_time.desc()).limit(PAGE_SIZE).offset((page - 1) * PAGE_SIZE).all()

for article in articles:
    print(article.title)

在这个例子中,我们查询文章按照创建时间倒序排序,每页包含10篇文章。我们可以通过更改 page 变量来获取不同的页码的文章列表。

如果我们想查询特定的关键字,我们可以添加如下代码:

keyword = 'pidancode.com'

articles = session.query(Article).filter(Article.title.like(f'%{keyword}%')).order_by(Article.create_time.desc()).limit(PAGE_SIZE).offset((page - 1) * PAGE_SIZE).all()

其中,like 方法表示查找标题中包含 keyword 字符串的文章。

至此,我们已经了解了如何在 SQLAlchemy 中使用分页查询。

相关文章