我正在使用sqlalchemy以下模型
class Page(db.Model):
id= ..
posts = db.relationship('Post', lazy='dynamic')
class Post(db.Model):
id=..
page_id=..
author= db.Column(db.String)
date= db.Column(db.DateTime)
在Page类中我有一个方法来获取特定日期和作者的页面帖子,它看起来像那样
def author_posts(author, start_date=None, end_date=None):
p= self.posts.filter(Post.author == author)
if start_date:
p.filter(Post.date >= start_date)
if end_date:
p.filter(Post.date <= end_date)
return p
问题是,即使函数被赋予开始和结束日期,它也会返回由作者过滤的帖子,但不会返回日期参数。
这样做的正确方法是什么?
编辑:生成的查询
SELECT post.id AS post_id, post.page_id AS post_page_id, post.author AS post_author ... FROM post WHERE post.author = ?
答案 0 :(得分:11)
filter()
返回一个新的查询对象,但不存储它。每次将p
替换为结果:
if start_date:
p = p.filter(Post.date >= start_date)
if end_date:
p = p.filter(Post.date <= end_date)
return p