[英]Filtering a relationship() in a single query with SQLAlchemy ORM?
我有urls
和requests
表,並且已經定義了如下關系:
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)
應該為您解決。 請查看有關加入的文檔,以獲取有關加入急切加載的數據的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.