我想使用以下代码选择几个特定日期的所有数据。
test_date = ('2012-08-04', '2013-08-19')
conn=sqlite3.connect(sqlite_file)
c=conn.cursor()
dat=c.execute("SELECT dat FROM dat_tbl WHERE date IN ? ", test_date)
dat_tuple=dat.fetchall()
conn.close()
失败并显示错误消息
OperationalError: near "?": syntax error
我想知道这里有什么问题以及如何解决它。感谢。
答案 0 :(得分:0)
正确的表达应该是,
c.execute("SELECT dat FROM dat_tbl WHERE date IN (?, ?)", (date1, date2))
问号应该用paranthesis包裹。
但是,您还希望consider using BETWEEN
。
<强>更新强>
string.join(sequence)可能会帮助您自动为查询注入问号。
请考虑以下,
>>> ', '.join(['?']*5)
'?, ?, ?, ?, ?'
因此,
>>> "SELECT * FROM example WHERE id in ({0})".format(', '.join(['?'] * len([1,3])))
'SELECT * FROM example WHERE id in (?, ?)'
或,
>>> q = "SELECT dat FROM dat_tbl WHERE date IN ({0})".format(', '.join(['?'] * len(test_date)))
>>> q
'SELECT dat FROM dat_tbl WHERE date IN (?, ?)'