Sqlite语句语法错误

时间:2010-11-08 20:56:38

标签: python sqlite

这个SQL语句出了什么问题?我得到了SQLError: near "?": syntax error

'select all counts from table as table where offset in ?'

?有一个数字绑定及其中的列表:(1,2,4)

3 个答案:

答案 0 :(得分:1)

猜测你正在使用的语言是Python ...
无论语言原理是否相同:
您需要动态创建适当数量的占位符。

>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> c = conn.cursor()
>>> c.execute('create table test (id int)')
<sqlite3.Cursor object at 0x011A96A0>
>>> c.executemany('insert into test values (?)', [(1,),(2,),(4,)])
<sqlite3.Cursor object at 0x011A96A0>
>>> ids = (1,2,4)
>>> query = 'select * from test where id in (%s)' % ','.join('?'*len(ids))
>>> query
'select * from test where id in (?,?,?)'
>>> c.execute(query, ids).fetchall()
[(1,), (2,), (4,)]

答案 1 :(得分:1)

我想你想要'select count(*) from table where offset in ?'

答案 2 :(得分:0)

可以将列表绑定到像这样的单个参数占位符吗?您可以考虑以下替代方法:创建临时表,将列表中的值插入临时表,然后在表和相关列上的临时表之间进行内部联接。总体而言,比使用具有必需数量的问号的(?,?,?,?)子字符串构建查询语句字符串更清晰,更易于维护。