使用SQLAlchemy ORM过滤单个查询中的relationship()?

时间:2012-12-18 04:06:30

标签: python sqlalchemy

我有urlsrequests个表,我已经定义了这样的关系:

class Request(Base):
    ...
    url_id = Column('url_id', Integer, ForeignKey(Url.id))
    requests = relationship(Url, backref='requests')

这意味着我可以询问Url.requests并获取所有以前为给定网址提出的请求。但是,我想要做的是针对一组限定在特定日期的网址获取requests

我可以写这个来获取我想要的结果集,但是我不知道如何整齐地打包它所以我可以遍历我的Url个对象并为每个对象获取.requests 。理想情况下,我也想加载这些Request对象。这是我写的以获得我想要的行:

session.query(Url).join(Request).filter(Request.created >= start_date, Request.created < end_date)

如果我转储查询它看起来很合理,但是当我遍历网址并询问每个网址.requests时,我得到所有的请求,而不仅仅是那些通过我的过滤器。是否可以使用ORM执行此操作?

1 个答案:

答案 0 :(得分:0)

session.query(Url).join(Url.request).\
    options(contains_eager(Url.request)).\
    filter(Request.created >= start_date, Request.created < end_date)

应该为你效劳。查看有关加入渴望加载数据的想法的文档。

http://docs.sqlalchemy.org/en/rel_0_8/orm/loading.html