2011-07-16 19 views
0

使用SQLAlchemy ORM(聲明式表單),您如何以編程方式從字典中的一組條件創建查詢?SQLAlchemy(ORM,聲明式):如何從字典中的鍵/值構建查詢?

我希望在用戶表中搜索匹配先前在字典中收集的某些條件的記錄。我不能提前知道哪個字段將被使用,並且必須能夠處理某些字段是整數,有些是字符串,可以有很多不同的領域,等等

例子:

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) 

兩個查詢已請求,導致以下類型的字典:

q1_dict = {'id' : 177} 

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

是否有任何簡單/通用的方式,我可以從這兩個類型的字典創建我的查詢,單純依靠該鍵相匹配的屬性的事實用戶類,正確處理類型,au包括不安全的值,等等?

我花了好幾個小時搜索這個,並瀏覽SQLAlchemy文檔,但似乎無法找到任何好的答案/例子。

解決方案:

所以,從你們的幫助之後,該解決方案似乎是那樣簡單:

User.query.filter_by(**q1_dict) 

User.query.filter_by(**q2_dict) 

...去在這個例子中所需要的兩個查詢。

我已經看過你提供的鏈接,dagoof,但是我想我的「python」還不夠強大,無法自行解決問題。 :)

+0

? –

回答

1

嘗試使用以下,參考文獻來創建AND條件在這裏:Queryfilter_by

session.query(User).filter_by(**q1_dict) 
要按名稱=查詢 '...' 及email = '...'
+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_()和將單一表達式條件....

相關問題