2010-11-08 198 views
1

這條SQL語句有什麼問題?我得到一個SQLError: near "?": syntax errorSqlite語句語法錯誤

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

The?有一個數字與其中的列表綁定:(1,2,4)

+0

看看格式化的方式,我猜這是用python編寫的。 – Varriount 2010-11-08 20:59:24

+0

你確定你的綁定正在綁定嗎? – 2010-11-08 21:07:21

回答

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

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

0

你可以綁定一個在列表到一個參數佔位這樣呢?您可能會考慮這種方法:創建一個臨時表,將列表中的值插入臨時表中,然後在表和相關列上的臨時表之間進行內部聯接。總的來說,比使用(?,?,?,?)子字符串構建查詢語句字符串具有所需數量的問號更清晰且更易維護。