我有一个包含不同列的表(pageNum,value1,value2,value3)。
我想在python3.3和sqlite3中执行类似的操作:
selection = (100, 200, 300)
cursor.execute(""" SELECT value1, value3
FROM myTable
WHERE value2>? and pageNum IN ?
""", (10, selection))
但似乎在抱怨:
sqlite3.OperationalError: near "?": syntax error
请注意,问题是关于如何以这种方式使用IN
子句,而不是如何使用查询,当然在这种情况下,它可以以不同的方式完成。
答案 0 :(得分:2)
因此,Alex Martelli的答案基本上解决了您的问题,因为对IN
的python支持非常笨拙,实质上您必须提供与您的集合中的值一样多的?
。
selection = (100, 200, 300)
questionmarks = '?' * len(selection)
formatted_query = 'SELECT value1, value3 FROM myTable
WHERE value2>? AND pageNum IN ({})'.format(','.join(questionmarks))
query_args = [10]
query_args.extend(selection)
result_set = c.execute(formatted_query, query_args)
上面的代码应该做,并且对它的作用有点解释:
它基本上根据需要为sql语句准备了?
,然后使用列表中提供的所有参数执行查询,这样sqlite将负责转义值。
如果您将查询转换为字符串,则必须确保自己清理这些不推荐的值。