Iは、のようなクエリをフィルタリングすることができるよany()
method使用:SQLAlchemyを使って、関連オブジェクト属性とRegexでフィルタリングする方法は?
session.query(Result).filter(Result.related_images.any(url='result1_1512149119.jpg'))
これは例えば、関連オブジェクトResultImages
によって定義さImage
オブジェクトとの関係を有するResult
クラスに関連した画像に対してフィルタリングされsession.query(Result.related_images).all()
は、Result
のエントリに関連して指定されたすべてのイメージを返します。上から最初のクエリを作る
、私は次の出力を得る:
session.query(Result).filter(Result.related_images.any(url='result2_1512149119.jpg'))
う:私のデータベースで
result1_1512149091.jpg
result1_1512149094.jpg
result1_1512149097.jpg
result1_1512149100.jpg
result1_1512149103.jpg
result1_1512149105.jpg
result1_1512149109.jpg
result1_1512149111.jpg
result1_1512149113.jpg
result1_1512149117.jpg
result1_1512149119.jpg
result1_1512149122.jpg
result1_1512149125.jpg
result1_1512149128.jpg
を、そのような次のクエリ多くの結果を得るために多くの画像があり、次のデータを返します。
result2_1512149091.jpg
result2_1512149094.jpg
result2_1512149097.jpg
result2_1512149100.jpg
result2_1512149103.jpg
result2_1512149105.jpg
result2_1512149109.jpg
result2_1512149111.jpg
result2_1512149113.jpg
result2_1512149117.jpg
result2_1512149119.jpg
result2_1512149122.jpg
result2_1512149125.jpg
result2_1512149128.jpg
any()
の機能がありますが、それをよりニュアンスのあるアプローチ(または可能であれば)に活用する方法についてはまだ不明です。たとえば、私が作成しているクエリの種類については、ファイル名の部分文字列であるresult1
を事前に知っているだけです。
result1_1512149091.jpg
サブストリングでフィルタリングされたクエリもresult1_1512149094.jpg
を返す理由がわかりません。私の特定の使用のために、これは理想的ですが、私はなぜこのように動作するのか分かりません。たとえば、.any('result1')
でフィルタリングすると、result1
イメージの完全なリストも返されますが、何も返されません。
私が最終的にやってみたいのは、正規表現を使ってアソシエーションオブジェクトの属性値をフィルタリングすることです(.any(url={{REGEX EXPRESSION}})
など)。これは可能でしょうか?
すごく、ありがとう! 'regex'を使うことは、私が持っていた考え方に過ぎませんでした。あなたのアプローチはまさに私が達成しようとしていたものだと思います。 – theeastcoastwest