繁体   English   中英

使用SQLAlchemy限制联接的ForeignKey查询

[英]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对象。

这里有两件事在起作用,它们似乎产生不一致的结果:

  1. limit适用于SQL查询,实际上限制了查询返回的行数
  2. 当查询映射实例时, sqlalchemy将删除重复项。

在您的情况下,将限制设置为3000确实会将SQL返回的行数限制为3000行,但是如果在这3000行中只有Voter类的700个不同的行,则只会返回700个此类实例。

在您的情况下, .join(Voter.histories)似乎是在数据库返回的行数与Voter实例数之间引入这种不对应关系的一种。


我希望这很清楚。 如果没有,我很乐意提供一个例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM