带变量值的Python SQLite IN运算符

带变量值的Python SQLite IN运算符,python,sql,sqlite,sql-in,Python,Sql,Sqlite,Sql In,在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 只有一个?sql语句中的占位符,但您希望传递值

在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
只有一个?sql语句中的占位符,但您希望传递值列表,这在语法上是错误的。 您可以使用:

cursor.execute("SELECT * FROM basicinfo WHERE id IN ?", ("(1, 2)",))
但这将导致以下sql语句:

SELECT * FROM basicinfo WHERE id IN '(1, 2)'
这不是你想要的,因为?占位符将替换为字符串文字“1,2”,而不是值列表

在这种情况下,您可以使用如下运算符:


您必须从逗号分隔的值列表中删除括号和空格。

Hmm使用LIKE的方法很复杂。我猜如果没有更直接的方法,那么最好自己用Python格式化查询。SQLite不提供可以用来解析逗号分隔列表的字符串函数,例如MySql有find_in_set,如果您不想在循环中创建包含串联的sql语句,那么like是唯一的选项。是的,它可以和字符串一起工作。它将创建如下语句:like',a,b,c',like',b,%
cursor.execute("SELECT * FROM basicinfo WHERE ',' || ? || ',' LIKE '%,' || id || ',%' ", ("1,2",))