Передача списка параметров в SQL в psycopg2 - PullRequest
36 голосов
/ 29 декабря 2011

У меня есть список идентификаторов строк для выборки из базы данных. Я использую python и psycopg2, и моя проблема в том, как эффективно передать эти идентификаторы в SQL? Я имею в виду, что если я знаю длину этого списка, это довольно легко, потому что я всегда могу вручную или автоматически добавлять столько «% s» выражений в строку запроса, сколько нужно, но здесь я не знаю, сколько из них мне нужно , Важно, чтобы мне нужно было выбрать эти строки с помощью оператора sql "id IN (id1, id2, ...)". Я знаю, что можно проверить длину списка и объединить подходящее число «% s» в строку запроса, но я боюсь, что это будет очень медленно и безобразно. У кого-нибудь есть идеи как это решить? И, пожалуйста, не спрашивайте, почему я должен делать это с помощью оператора «IN» - это тест, который является частью моего задания в классе. Заранее спасибо!

1 Ответ

62 голосов
/ 29 декабря 2011

Кортежи Python преобразуются в списки sql в psycopg2:

cur.mogrify("SELECT * FROM table WHERE column IN %s;", ((1,2,3),))

будет выводить

'SELECT * FROM table WHERE column IN (1,2,3);'

Для новичков в Python: К сожалению, важно использовать кортеж, а не список здесь. Вот второй пример:

cur.mogrify("SELECT * FROM table WHERE column IN %s;", 
    tuple([row[0] for row in rows]))
...