Python оператор SQLite IN со значением переменной - PullRequest
0 голосов
/ 30 апреля 2020

В Python SQLite, как мне сделать (1, 2) переменной, например:

cursor.execute('SELECT * FROM basicinfo WHERE id IN (1, 2)')

Выполнение следующих действий не работает:

cursor.execute('SELECT * FROM basicinfo WHERE id IN ?', (1, 2))

Это дает ошибка:

sqlite3.OperationalError: near "?": syntax error

1 Ответ

1 голос
/ 30 апреля 2020

В вашем выражении sql есть только 1 ? заполнитель, но вы хотите передать список значений, и это синтаксически неверно. Вы могли бы использовать:

cursor.execute("SELECT * FROM basicinfo WHERE id IN ?", ("(1, 2)",))

, но это привело бы к следующему выражению sql:

SELECT * FROM basicinfo WHERE id IN '(1, 2)'

, что вам не нужно, поскольку заполнитель ? будет заменен на строковый литерал '(1, 2)', а не список значений.

В этом случае вы можете использовать оператор LIKE:

cursor.execute("SELECT * FROM basicinfo WHERE ',' || ? || ',' LIKE '%,' || id || ',%' ", ("1,2",))

Вам потребуется удалить скобки и пробелы из списка значений, разделенных запятыми.

...