2016-04-22 28 views
0

當我在查詢中調用limit時,我得到的結果不準確,我不確定是什麼原因造成的。使用SQLAlchemy限制已加入的ForeignKey查詢

型號:

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) 

如果我打電話.countres我拿到〜4000的結果。如果我做res.limit(3000).all(),我可以得到約700個結果。

這是怎麼回事,我該如何解決?我試圖獲得3000 Voter對象。

回答

0

有在玩兩樣東西在這裏,這一起似乎產生不一致的結果:

  1. limit適用於SQL查詢,確實限制其通過查詢
  2. 當查詢返回的行數對於映射的實例,sqlalchemy將刪除重複項。

在你的情況,設定的3000的限制的確會限制行數從SQL返回3000行,但如果這些3000行中只有700 不同Voter類的,只700個這樣的實例將被返回。

在你的情況.join(Voter.histories)看起來是它引入了行數之間的這種不對應從數據庫和Voter實例的數量返回的一個。


我希望這很清楚。如果沒有,我很樂意提供一個例子。