Подтвердить что ты не робот

Передача списка параметров в SQL в psycopg2

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

4b9b3361

Ответ 1

Кортежи 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]))

Ответ 2

этот вопрос старый и, возможно, есть более новый, но мои коллеги ответят прямо сейчас так:

sql = "SELECT * FROM table WHERE column = ANY(%(parameter_array)s)"
cur.execute(sql,{"parameter_array": [1, 2, 3]})