Python 使用SQLAlchemy ORM在单个查询中筛选关系()?

Python 使用SQLAlchemy ORM在单个查询中筛选关系()?,python,sqlalchemy,Python,Sqlalchemy,我有url和请求表,我定义了如下关系: class Request(Base): ... url_id = Column('url_id', Integer, ForeignKey(Url.id)) requests = relationship(Url, backref='requests') 这意味着我可以询问Url.requests,并获取针对给定Url的所有请求。但是,我想做的是获取限制在特定日期的一组URL的请求 我可以编写它来获得我想要的结果集,但我不知道如

我有
url
请求
表,我定义了如下关系:

class Request(Base):
    ...
    url_id = Column('url_id', Integer, ForeignKey(Url.id))
    requests = relationship(Url, backref='requests')
这意味着我可以询问
Url.requests
,并获取针对给定Url的所有请求。但是,我想做的是获取限制在特定日期的一组URL的
请求

我可以编写它来获得我想要的结果集,但我不知道如何将其整齐地打包,这样我就可以迭代我的
Url
对象,并获得每个对象的
.requests
。理想情况下,我也想加载这些请求对象。以下是我为取回所需行而编写的内容:

session.query(Url).join(Request).filter(Request.created >= start_date, Request.created < end_date)
session.query(Url).join(Request).filter(Request.created>=start\u date,Request.created
如果我转储查询,它看起来相当合理,但是当我迭代URL并请求每个
.requests
时,我会返回所有请求,而不仅仅是通过筛选的请求。使用ORM可以做到这一点吗?

会话.query(Url).join(Url.request)\
session.query(Url).join(Url.request).\
    options(contains_eager(Url.request)).\
    filter(Request.created >= start_date, Request.created < end_date)
选项(包含_eager(Url.request))\ 过滤器(Request.created>=开始日期,Request.created<结束日期)
应该适合你。查看有关加入的文档,了解如何使用已加载的数据加入