如何使用Python包sqlite3'IN'?

时间:2018-02-27 05:02:23

标签: python-3.x sqlite

我想使用以下代码选择几个特定日期的所有数据。

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

我想知道这里有什么问题以及如何解决它。感谢。

1 个答案:

答案 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 (?, ?)'