簡體   English   中英

使用SQLAlchemy ORM在單個查詢中過濾Relationship()?

[英]Filtering a relationship() in a single query with SQLAlchemy ORM?

我有urlsrequests表,並且已經定義了如下關系:

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

這意味着我可以詢問Url.requests並獲取針對給定Url進行的所有請求。 但是,我想做的是獲取一組限制在特定日期的Urls的requests

我可以編寫此代碼以獲得所需的結果集,但我不知道如何將其整齊打包,因此可以遍歷Url對象並為每個對象獲取.requests 理想情況下,我也想加載這些Request對象。 這是我寫的以獲取所需的行:

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

如果我轉儲查詢,這看起來很合理,但是當我遍歷URL並向每個URL請求.requests我會取回所有請求,而不僅僅是通過篩選器的請求。 是否可以通過ORM做到這一點?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM