Ошибка синтаксиса оператора Sqlite - PullRequest
1 голос
/ 08 ноября 2010

Что не так с этим оператором SQL?Я получаю SQLError: near "?": syntax error.

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

The?имеет привязку чисел со списком в нем: (1,2,4).

Ответы [ 3 ]

1 голос
/ 09 ноября 2010

я думаю, что вы хотите 'select count(*) from table where offset in ?'

1 голос
/ 09 ноября 2010

Просто предположите, что вы используете 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,)]
0 голосов
/ 09 ноября 2010

Можете ли вы привязать список к заполнителю с одним параметром?Вы можете рассмотреть эту альтернативу: создать временную таблицу, вставить значения в списке во временную таблицу, а затем выполнить внутреннее соединение между вашей таблицей и временной таблицей в соответствующем столбце.В целом, чище и удобнее в обслуживании, чем создание строки оператора запроса с подстрокой (?,?,?,?), Имеющей необходимое количество вопросительных знаков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...