[英]Limiting joined ForeignKey query using SQLAlchemy
当我对查询调用limit
时,我得到的结果不准确,我不确定是什么原因造成的。
楷模:
class Voter(db.Model):
histories = db.relationship('VoterHistory', backref='voter', lazy='dynamic')
ncid = db.Column(db.String(80),unique=True)
class VoterHistory(db.Model):
voter_ncid = db.Column(db.String(80), db.ForeignKey('voter.ncid'))
election_lbl = db.Column(db.String(280))
例
q1 = Voter.query.filter_by(birth_age='25')
q2 = db.and_(Voter.histories.any(VoterHistory.election_lbl == '11/03/2015'),
Voter.histories.any(VoterHistory.election_lbl == '03/15/2016'))
res= q1.join(Voter.histories).filter(q2)
如果我调用.count
on res
我将获得.count
个结果。 如果我执行res.limit(3000).all()
我将得到700个结果。
这是怎么回事,我该如何解决? 我正在尝试获得3000个Voter
对象。
这里有两件事在起作用,它们似乎产生不一致的结果:
limit
适用于SQL
查询,实际上限制了查询返回的行数 sqlalchemy
将删除重复项。 在您的情况下,将限制设置为3000确实会将SQL返回的行数限制为3000行,但是如果在这3000行中只有Voter
类的700个不同的行,则只会返回700个此类实例。
在您的情况下, .join(Voter.histories)
似乎是在数据库返回的行数与Voter
实例数之间引入这种不对应关系的一种。
我希望这很清楚。 如果没有,我很乐意提供一个例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.