我正在使用flask-sqlalchemy和sqlite數據庫一起使用。我試圖讓下面的日期1sqlalchemy:paginate不返回預期的元素數
sub_query = models.VoteList.query.filter(models.VoteList.vote_datetime < date1)
sub_query = sub_query.filter(models.VoteList.group_id == selected_group.id)
sub_query = sub_query.filter(models.VoteList.user_id == g.user.id)
sub_query = sub_query.subquery()
old_votes = models.Papers.query.join(sub_query, sub_query.c.arxiv_id == models.Papers.arxiv_id).paginate(1, 4, False)
所有票爲地方的VoteList數據庫模型看起來像這樣
class VoteList(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
group_id = db.Column(db.Integer, db.ForeignKey('groups.id'))
arxiv_id = db.Column(db.String(1000), db.ForeignKey('papers.arxiv_id'))
vote_datetime = db.Column(db.DateTime)
group = db.relationship("Groups", backref=db.backref('vote_list', lazy='dynamic'))
user = db.relationship("User", backref=db.backref('votes', lazy='dynamic'), foreign_keys=[user_id])
def __repr__(self):
return '<VoteList %r>' % (self.id)
我確信的是,上述「old_votes」評選有20個元素。如果我使用.all()而不是.paginate(),我會得到預期的20個結果? 因爲我在上面的例子中使用了最大結果值4,所以我認爲old_votes.items有4個元素。但它只有2?如果我增加最大結果值,元素的數量也會增加,但它總是低於最大結果值?分頁似乎在這裏搞點東西? 有什麼想法? 感謝 卡爾
編輯 我發現,如果我申請上add_columns的PAGINATE()函數工作正常()。所以,如果我加上(沒有很好的理由)列
old_votes = models.Papers.query.join(sub_query, sub_query.c.arxiv_id == models.Papers.arxiv_id)
old_votes = old_votes.add_columns(sub_query.c.vote_datetime).paginate(page, VOTES_PER_PAGE, False)
它工作正常嗎?但是因爲我不需要這個列,所以知道我上面的例子出了什麼問題仍然很有趣?
是的這就是它...非常感謝 – carl
有沒有辦法來防止刪除重複? – carl
我不確定這會是什麼目的,但我認爲如果你查詢'tuple'而不是'model'實例,它就可以解決問題。因此,不要使用'models.Paper.query ...'(這是(幾乎)'session.query(Paper)'的別名'')'session.query([Paper])...'。但結果不是'Paper'的實例,而是具有'Paper'實例的元組。 – van