SQL-запросы на Python с использованием переменных - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть список идентификаторов

L1=['A1','A14','B43']

Я пытаюсь использовать сценарий SQL для извлечения информации из таблицы, где идентификатор находится в приведенном выше списке.

sqlquery= "select * from table where ID in " + L1
cur.execute(sqlquery)

Я подключился к vertica, используя vertica_python и sqlalchemy_vertica.Но я не уверен, как включить мою переменную (список L1) в SQL-запрос.

Updated Code:
data = ['A1', 'A14', 'B43', ...]
placeholders = ','.join('?' * len(data))  # this gives you e.g. '?,?,?'
sqlquery = 'SELECT * FROM table WHERE id IN (%s)' % placeholders
cur.execute(sqlquery, tuple(data))

1 Ответ

1 голос
/ 11 апреля 2019

Документы по https://github.com/vertica/vertica-python показывают, что реализация DBAPI Vertica использует ? для позиционных заполнителей, поэтому вы можете использовать параметризованный запрос.

К сожалению, списки не могут быть успешно переданы и нуждаются в одном параметредля каждого элемента, поэтому вам нужно генерировать эту часть динамически:

data = ['A1', 'A14', 'B43', ...]
placeholders = ','.join('?' * len(data))  # this gives you e.g. '?,?,?'
sqlquery = 'SELECT * FROM table WHERE id IN (%s)' % placeholders
cur.execute(sqlquery, data)

Но вы по-прежнему разделяете данные и SQL таким образом, поэтому нет риска внедрения SQL!

...