2016-04-22 24 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) 

私はres.countを呼び出すと、私は〜4000の結果を得ます。もし私がすればres.limit(3000).all()私は約700の結果を得る。

ここでは何が起こっていて、どうすれば修正できますか? 3000 Voterオブジェクトを取得しようとしています。

答えて

0

劇中の二つが一緒に一貫性のない結果を生成するように見えるれ、ここにあります

  1. limitが実際にクエリ照会
  2. によって返される行の数を制限し、SQLクエリに適用されますマップされたインスタンスの場合、sqlalchemyは重複を削除します。 3000の制限を設定することは確かにのみ、3000行にSQLから返される行数を制限しますが、それらの3000行以内Voterクラスの唯一の700 明確な行がある場合でしょう、あなたの場合は

、そのようなインスタンスが返されます。あなたのケースでは

.join(Voter.histories)は、データベースとVoterインスタンスの数から返される行の数との間のこの非対応を紹介1になりそうです。


これは明らかです。もしそうでなければ、私は例を挙げてうれしいです。

関連する問題