2015-01-02 80 views
0

我想在我的類中創建一個方法,它可以讓我使用任意大小的一組列來篩選sqlachemy查詢的結果。喜歡的東西:python - 使用** kwargs構造方法參數?

def Find(self, **kwargs): 

    f = self.db_session.filter(kwargs).first() 

但是,.filter()方法需要在格式table_name.column_name == value參數。在這種情況下,表名總是固定的,並且我在kwargs字典中將column_name/value作爲鍵/值對傳入。

有沒有一種方法,我看不到操縱在Find()方法中傳遞的字典以正確的格式輸入參數filter()

回答

1

filter()實際上需要位置參數。所述table_name.column_name == value表達返回一個對象(由於__eq__方法通過SQLAlchemy的超載),其代表了平等條件,並然後被傳遞到filter()無關鍵字參數名稱(注意在參數缺乏任何=你將正常傳遞)。

因此,你可以使用Find(self, *args),然後調用.filter(*args),你就能夠調用Find你只是如何調用filter()

def Find(self, **kwargs): 
    f = self.db_session.filter(kwargs).first() 
    #... 


# invoke as foo.Find(table_name.column_name == value, ...) 
0

的SQLAlchemy的查詢對象已有一個filter_by()方法,該方法關鍵字參數,映射列名,他們必須等於值。

相關問題