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