【问题标题】:Filtering a relationship() in a single query with SQLAlchemy ORM?使用 SQLAlchemy ORM 在单个查询中过滤关系()?
【发布时间】:2018-09-25 18:49:57
【问题描述】:

我有 urlsrequests 表,并且我定义了这样的关系:

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

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

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

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

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

【问题讨论】:

    标签: python sqlalchemy


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2018-08-09
      相关资源
      最近更新 更多