Python 正确的方法;选择*from tbl where field in?";占位符是一个没有字符串插值的列表
我使用pysqlite查询了此表单:Python 正确的方法;选择*from tbl where field in?";占位符是一个没有字符串插值的列表,python,pysqlite,Python,Pysqlite,我使用pysqlite查询了此表单: query = "select * from tbl where field1 in ?" variables = ['Aa', 'Bb'] 在查询中,我希望这样做: with conn.cursor() as db: res = db.execute(query, (variables,)).fetchall() 例如,在SQLITE命令行中解释为: select * from tbl where field1 in ("Aa", "Bb");
query = "select * from tbl where field1 in ?"
variables = ['Aa', 'Bb']
在查询中,我希望这样做:
with conn.cursor() as db:
res = db.execute(query, (variables,)).fetchall()
例如,在SQLITE命令行中解释为:
select * from tbl where field1 in ("Aa", "Bb");
但这在以下方面失败:
pysqlite3.dbapi2.InterfaceError: Error binding parameter 0 - probably unsupported type.
我知道我可以只使用string.join([mylist]),但这是不安全的。如何在sqlite和python中使用占位符参数和列表
更新
与此不同的是,他们似乎希望使用%s字符串插值,而我希望避免这种情况
问题:字段在哪里?
占位符是一个没有字符串插值的列表
- 值是
int
values = (42, 43, 44)
- 使用绑定数准备查询
输出:bindings = '?,'*len(values) QUERY = "SELECT * FROM t1 WHERE id IN ({});".format(bindings[:-1]) print("{}".format(QUERY))
SELECT * FROM t1 WHERE id IN (?,?,?);
- 执行查询
cur.execute (QUERY, values)
字段=(“Aa”,“Bb”)
======================结果集=c.execute('select*from tbl,其中字段1位于(%s)%(“?,”*len(字段))[:-1],字段)
谢谢,我在问如何使用占位符安全地执行此操作?语法,而不是字符串插值。使用?
时,这已经考虑了sql注入,但我仍然在寻找它。这似乎是重复的,我假设变量的长度是未知的,可能会变化?