テーブルがオブジェクトの「生の」パス識別子を格納する宣言されたモデルがあります。次に@hybrid_property
、このフィールドで識別されるオブジェクトを直接取得および設定できる があります (これは別の宣言型モデルではありません)。この高レベルで直接クエリを実行する方法はありますか?
私がすることができます:
session.query(Member).filter_by(program_raw=my_program.raw)
私はこれを行うことができるようにしたい:
session.query(Member).filter_by(program=my_program)
どこmy_program.raw == "path/to/a/program"
Member
には、正しいインスタンスを取得して適切な値を設定するフィールドprogram_raw
とプロパティがあります。一意に識別する単純なフィールドがあります。必要に応じて、さらにコードを提供できます。program
Program
program_raw
Program
raw
問題は、現在、SQLAlchemy が単にプログラム インスタンスを値ではなくパラメータとしてクエリに渡そうとしていることraw
です。これにより、Error binding parameter 0 - probably unsupported type.
エラーが発生します。
- いずれにせよ、SQLAlchemy は、 を比較するときに
program
、それを使用してパラメーターのプロパティMember.program_raw
と照合する必要があることを認識する必要があります。raw
使用するMember.program_raw
のは簡単ですが、パラメーターを正しく@program.expression
変換する方法がわかりません (コンパレーターを使用しますか?)、および/またはProgram
- SQLAlchemy は、
Program
インスタンスでフィルタリングするときにraw
属性を使用する必要があることを認識している必要があります。
私のユースケースはおそらく少し抽象的ですが、シリアル化された RGB 値をデータベースに格納し、モデルに Color クラスを持つプロパティがあると想像してください。Color クラスでフィルタリングしたいのですが、フィルターで RGB 値を処理する必要はありません。カラークラスは、RGB 値を教えてくれます。