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 ответ
Решение
- Создайте правильное количество заполнителей. В pg8000 заполнитель по умолчанию
%s
, - Интерполировать заполнители в строку запроса.
- Выполнить 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,))