使用SQLAlchemy限制连接的ForeignKey查询

时间:2016-04-22 05:39:54

标签: python sql postgresql sqlalchemy

当我在查询中拨打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

如果我在res上拨打res.limit(3000).all(),我会得到~4000个结果。如果我Voter我得到大约700个结果。

这里发生了什么,我该如何解决?我试图获得3000 app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); next(); }); 个对象。

1 个答案:

答案 0 :(得分:0)

这里有两件事情,它们似乎共同产生不一致的结果:

  1. var tenant = searchUser(); var user = tenant.user; var detail = tenant.detail; //... do something with user and detail 适用于limit查询,实际上限制了查询返回的行数
  2. 当您查询映射的实例时,SQL将丢弃重复项。
  3. 在您的情况下,设置限制为3000确实会限制从SQL返回到3000行的行数,但如果在这3000行中,只有700个不同行{{ 1}}类,只返回700个这样的实例。

    在您的情况下,sqlalchemy看起来是在数据库返回的行数和Voter实例数之间引入此非对应的那个。

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