sqlalchemy条件多重过滤动态懒惰关系

时间:2012-09-20 17:04:34

标签: python sqlalchemy flask flask-sqlalchemy

我正在使用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 = ?

1 个答案:

答案 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