2016-09-19 30 views
2

我有一個正在用來查詢數據庫匹配的字典。我有一個查詢行不適合我。如果我有像這樣的列表:什麼是python'in',但sqlalchemy

user['names']= [Alice, Bob, John] 

由於這是一個列表我試圖用這樣的:

q.filter(UserTable.firstname in user['firstnames']) 

但不管是什麼原因,這是行不通的。但是,我知道Bob在數據庫中。當我手動拉下所有的查詢時,我可以看到名字在其中一行中。如果我這樣做:

q.filter(UserTable.firstname == user['firstnames'][1]) #Only does Bob 

它的工作原理。並且,當我手動提取所有查詢時,將每一行轉換爲字典,然後執行

row[#row_that_matches].firstname in user['names'] 

也可以。但由於某些原因,在sqlalchemy中使用「in」關鍵字無法按預期工作。有沒有人知道一個替代方案,可以對值列表中的某些東西進行sqlalchemy查詢?

+1

你可能想嘗試in_函數,我想。 Usertable.firstname.in_(user ['firstnames']) – Max

回答

1

使用in_() column method以測試列針對序列:

q.filter(UserTable.firstname.in_(user['firstnames']) 

參見對象關係教程Common Filter Operations section

IN

query.filter(User.name.in_(['ed', 'wendy', 'jack'])) 

# works with query objects too: 
query.filter(User.name.in_(
     session.query(User.name).filter(User.name.like('%ed%')) 
)) 
+0

你和max是正確的,謝謝!我在沒有任何錯誤的情況下嘗試着,我應該知道在sqlalchemy函數中會有in_內建的。謝謝你的澄清 :) –

相關問題