0

テーブルがurlsありrequests、次のような関係を定義しました。

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

つまり、特定のURLに対してこれまでに行われたすべてUrl.requestsのリクエストを要求して取得できるということです。ただし、私がやりたいのは、特定の日付に制限されているURLのセットを取得することです。requests

これを記述して、必要な結果セットを取得できますが、これを適切にパッケージ化する方法がわからないため、オブジェクトを反復処理して各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 に答える