テーブルがオブジェクトの「生の」パス識別子を格納する宣言されたモデルがあります。次に@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とプロパティがあります。一意に識別する単純なフィールドがあります。必要に応じて、さらにコードを提供できます。programProgramprogram_rawProgramraw
問題は、現在、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 値を教えてくれます。