3

SQLAlchemy ORM(宣言型)を使用して、辞書内の一連の条件からプログラムでクエリを作成するにはどうすればよいですか?

以前にdictで収集されたいくつかの基準に一致するusersテーブルでこれらのレコードを検索したいと思います。どのフィールドが使用されるかを事前に知ることはできません。また、一部のフィールドが整数、一部が文字列、さまざまなフィールドが存在する可能性があることなどを処理できる必要があります。

例:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

2つのクエリが要求されたため、次のようになります。

q1_dict = {'id' : 177}

q2_dict = {'name' : 'Johnny', 'email' : 'johnny@somewhere.com'}

型を正しく処理したり、安全でない値を自動エスケープしたりしながら、キーがUserクラスの属性と一致するという事実に依存するだけで、これら2つのdictからクエリを作成できる簡単で一般的な方法はありますか?

私はこれをグーグルで調べ、SQLAlchemyのドキュメントを閲覧するのに数時間を費やしましたが、良い答え/例を見つけることができないようです。

解決:

だから、皆さんの助けを借りれば、解決策は次のように簡単に思えます:

User.query.filter_by(**q1_dict)

User.query.filter_by(**q2_dict)

...例で必要な2つのクエリを取得します。

私はあなたが提供したリンク、dagoofをすでに見ましたが、私の「python」は自分で解決策を見つけるのに十分なほど強力ではなかったと思います。:)

4

2 に答える 2

1

以下を試してください。ここで参照してください:Queryfilter_by

session.query(User).filter_by(**q1_dict)
于 2011-07-16T17:18:17.957 に答える
0

いくつかのサンプルコード:

100         COND = and_()
.....
216         if hidxs_sg:$
217             clause = [AM.hidx == hidx for hidx in hidxs_sg]$
218             COND.append(or_(*clause))$
....
300         query = session.query(AM).filter(COND)$

重要なのは、and_()を使用してAND条件を作成し、条件に単一の式を追加することです。

于 2011-07-16T16:59:34.013 に答える