0

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

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

这意味着我可以询问Url.requests并获取针对给定 URL 发出的所有请求。但是,我想做的是获取requests一组仅限于特定日期的 Url。

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

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

如果我转储查询,它看起来很合理,但是当我遍历 url 并询问每个请求时,.requests我会返回所有请求,而不仅仅是那些通过我的过滤器的请求。可以用 ORM 做到这一点吗?

4

1 回答 1

1
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

于 2012-12-18T12:01:50.110 回答