2011-05-16 23 views
2

在Python中給出一個大的(〜10,000)整數列表,我如何有效地從其列表中的id列表中獲得所有項目SELECT使用psycopg2進行參數化查詢:從Python列表中選擇

我已經試過:

>>> lst2 
[{'id': 97600167}, {'id': 97600168}, {'id': 97611194}] 
>>> cur.executemany("SELECT id, parent_id FROM my_table WHERE id=%(id)s", lst2) 
>>> cur.fetchall() 
[(97611194, 10020688), (None, None), (None, None)] 

第二和第三ID(97600168,97611194)也存在於表中。

回答

5

使用你的榜樣,用where id in然後傳遞參數是你要選擇的ID值的元組:

>>> lst2 
[{'id': 97600167}, {'id': 97600168}, {'id': 97611194}] 
>>> ids = tuple(x['id'] for x in lst2) 
>>> cur.execute("SELECT id, parent_id FROM my_table where id in %s",[ids]) 
+0

+1用於傳遞[元組()] – 2011-05-16 16:11:07

+0

謝謝,但它給我是'psycopg2.ProgrammingError:無法適應'異常。 – 2011-05-16 17:13:56

+0

你使用的是什麼版本?在發佈之前,我在'psycopg2 .__ version__ == 2.0.14'上測試了這個參數化。你沒有通過(單個項目序列)一個'int'的元組,這正如我的例子所示? – MattH 2011-05-16 18:42:54

相關問題