2011-07-16 2 views
0

SQLAlchemy ORM(宣言形式)を使用すると、辞書の条件セットからプログラムでどのようにクエリを作成できますか?SQLAlchemy(ORM、宣言的):dictのキー/値からクエリを構築するには?

私は以前に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つのクエリは、次のdictsその結果、要求された:

q1_dict = {'id' : 177} 

q2_dict = {'name' : 'Johnny', 'email' : '[email protected]'} 

は、単にキーが属性が一致しているという事実に頼って、私はそれらの2枚のdictsから私のクエリを作成することができます任意の単純/一般的な方法はありますUserクラスの型を正しく扱いながら、au安全でない値などを避けるために?

私は数時間かけてこれを検索し、SQLAlchemyのドキュメントを閲覧しましたが、良い答えや例は見つかりませんでした。

ソリューション:例に必要な2つのクエリを取得する...

User.query.filter_by(**q1_dict) 

User.query.filter_by(**q2_dict) 

そうで、皆さんからの助けた後、溶液は、のような単純なもののようです。

私はあなたが提供したリンクを既に見ていましたが、私の "python"は自分自身で解決策に到達するのに十分ではなかったと思います。 :)

+0

filter_by? –

答えて

1

は、以下の、参照してみてくださいここで:Query、あなたは '...' =名前で照会すると電子メール= '...'

session.query(User).filter_by(**q1_dict) 
+0

はい!これは私が探していたものでした、ありがとう! – herira

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条件を作成することです()と条件に、単一の式を追加....

関連する問題