【发布时间】:2016-05-13 07:19:59
【问题描述】:
当我在 MySQL 中手动执行这个查询时,我得到的结果数是 28:
SELECT *
FROM position_reporting_structures prs
INNER JOIN positions AS pos ON pos.id = prs.reports_to
INNER JOIN jobs ON jobs.id = pos.job_id
INNER JOIN position_fulfillments AS pf ON pf.position_id = pos.id
INNER JOIN parties ON parties.id = pf.party_id
WHERE jobs.title LIKE '%QA/QC%' OR parties.name LIKE '%QA/QC%';
这是上面查询的解释 SQLAlchemy 值:
query = (
PositionReportingStructure.query
.join(Position,
Position.id == PositionReportingStructure.reports_to)
.join(Job,
Job.id == Position.job_id)
.join(PositionFulfillment,
PositionFulfillment.position_id == Position.id)
.join(Party,
Party.id == PositionFulfillment.party_id)
.filter(db.or_(
Job.title.like('%QA/QC%'),
Party.name.like('%QA/QC%')))
)
我有一个分页装饰器,它包装了一个返回值为BaseQuery 的函数。在装饰器内部,这些是我使用的代码 sn-ps:
query = f(*args, **kwargs)
page = 1 // just a dummy value
per_page = 5 // just a dummy value
paginate = query.paginate(page=page, per_page=per_page)
我预计它将返回或多或少 6 页和总共 28 项,但事实并非如此。结果是 1 page、4 items per page、4 total items 和 no previous/next pages,这是不正确的。为了进一步调查,我尝试更改 page 变量的值来比较每个变量:
-
page = 1:1 页,4 项,共 4 项 -
page = 2:6 页,3 条,共 28 条 -
page = 3:6 页,2 条,共 28 条 -
page = 4:6 页,3 条,共 28 条 -
page = 5:6 页,5 条,共 28 条 -
page = 6:6 页,3 条,共 28 条
您可能会注意到,每页的项目太不一致了。谁能解释造成这种意外情况的原因?我目前正在使用 Flask-SQLAlchemy-2.0。
【问题讨论】:
-
请提供本示例中使用的 SQLAlchemy 和 MySQL 查询。没有更多上下文,我们无法找到真正的问题。
-
感谢您通知@jonafato,已经提供了查询及其 sqlalchemy 值。请查看更新内容:)
标签: python-2.7 flask flask-sqlalchemy