Python/pg8000 WHERE IN оператор

Как правильно сделать так, чтобы кортеж (имена) был доступен через%s в операторе SQL?

names = ('David', 'Isaac')
sql = 'SELECT * from names WHERE name IN %s'
cur.execute(sql,(names,))

Ответ в /questions/14759911/pythonpsycopg2-gde-v-zayavlenii/14759927#14759927 работает для psycopg2, но не работает в pg8000.

Спасибо!

1 ответ

Решение
  1. Создайте правильное количество заполнителей. В pg8000 заполнитель по умолчанию%s,
  2. Интерполировать заполнители в строку запроса.
  3. Выполнить SQL-безопасный для инъекций запрос.

Вот так:

sql = 'SELECT * from names WHERE name IN ({})'.format( ','.join(['%s']*len(names)) )
# results in -> 'SELECT * from names WHERE name IN (%s,%s)'
cur.execute(sql,(names,))
Другие вопросы по тегам