我正在尝试从Python中在SQLite中执行以下查询。
conn = sqlite3.connect('test.db')
c = conn.cursor()
names = ['name1','name2']
ids = ['id1','id2']
query = 'SELECT * FROM STUDENT_DETAILS WHERE NAME IN (%s)' % ','.join('?'*len(names)) + ' AND ID IN (%s)' % ','.join('?'*len(ids))
c.execute(query,(names, ids))
conn.close()
当我执行上面的代码时,我收到以下错误。
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 2 supplied.
我能够在查询中使用单个IN子句执行查询,如下所示。
conn = sqlite3.connect('test.db')
c = conn.cursor()
names = ['name1','name2']
query = 'SELECT * FROM STUDENT_DETAILS WHERE NAME IN (%s)' % ','.join('?'*len(names))
c.execute(query,names)
conn.close()
我想知道,如何替换值,如果我在查询中使用多个IN子句。
答案 0 :(得分:1)
SQL查询中return getAd();
的数量需要与参数元组中的项目数相匹配。在第一个示例中,元组中有两个项目:?
和names
。但是有四个问号。尝试ids
,或使用圆括号将变量定义为元组,然后使用tuple(names) + tuple(ids)
。
在第二个例子中,它包含一个包含两个名字的元组names + ids
,因此它可以工作。