Параметризованные запросы с помощью psycopg2: SELECT из списка Python - PullRequest
2 голосов
/ 16 мая 2011

Учитывая большой (~ 10 000) список целых чисел в Python, как мне эффективно SELECT все элементы таблицы, чей идентификатор находится в списке?

Я пробовал:

>>> 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)]

Второй и третий идентификаторы (97600168, 97611194) существуют в таблице.

1 Ответ

6 голосов
/ 16 мая 2011

Используя ваш пример, используйте 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])
...