2011-03-25 36 views
1

我想在SQLalchimy中添加持久SQL where子句。 基本上我有一個包含特定字段的表,並且我希望所有的請求都添加一個where子句,所以這個字段匹配一個子句。持續where子句SQLAlchemy

舉例來說,如果我的要求是

session.query(MyTable).all() 

我想生成的請求是這樣:

SELECT * FROM Table WHERE specific_field = 'some_value'; 

是否有這樣做不增加一個過濾器,每一種方式要求?

在此先感謝。

+0

見這個問題的答案:http://stackoverflow.com/問題/ 2885415 /什麼,是最最好的方式,預過濾器用戶訪問換SQLAlchemy的查詢 – 2011-03-29 08:44:09

回答

1

如果添加:

dbengine.echo = True 
session.query(MyTable).filter_by(specified_field = 'some_value').all() 

我不知道你所說的意思:「不添加過濾器每一個請求。」我的猜測是你不想過濾請求客戶端。爲此生成的SQL應該看起來很像你所要求的; dbengine.echo = True位會顯示你生成的SQL。基於OP評論

更新:

如果你真的希望所有的查詢有一個過濾器,那麼一個簡單的(但在我看來不是那麼漂亮)的方法是添加自己的查詢方法:

def myquery(self, table): 
    self.query(table).filter_by(specified_field = 'some_value') 

session.__class__.some_arbitrarily_filtered_query = myquery 

之後,你可以撥打電話(舉例):

session.some_arbitrarily_filtered_query(MyTable).all() 
+0

沒錯,但其目的是有 filter_by(specified_field =「SOME_VALUE」)加入 自動 – chouquette 2011-03-25 14:52:54

+0

我想我會手動使用濾鏡,但感謝這個想法! – chouquette 2011-03-25 16:32:09

+0

@chouquette:這聽起來像是正確的決定。如果您經常使用某些類型的查詢,您可以隨後將它們放入函數中 - 我認爲這是使用SQLAlchemy的查詢構建方法的主要好處之一。 – phooji 2011-03-25 20:21:34

0

真的暗示這是它過於複雜,但...

CREATE VIEW Table2 AS SELECT * FROM Table WHERE specific_field = 'some_value'; 

則反映

table2 = sqlalchemy.Table('Table2', metadata, autoload=True) 

,只是查詢有觀點,有可能它映射(也提供了主鍵)來

class MyTable2(MyTable): 
    pass 

未經測試,但應該工作