Предложение sqlite3 "IN"

У меня есть таблица с разными столбцами (pageNum, value1, value2, value3).

Я хочу сделать что-то подобное в python3.3 и sqlite3:

selection = (100, 200, 300) cursor.execute(""" SELECT value1, value3 FROM myTable WHERE value2>? and pageNum IN ? """, (10, selection)) 

Но похоже, что он жалуется:

 sqlite3.OperationalError: near "?": syntax error 

Обратите внимание, что вопрос заключается в том, как использовать предложение IN таким образом, а не о том, как выполнить запрос, что, конечно, в этом случае можно было бы по-другому.

Таким образом, ответ от Alex Martelli по сути решает вашу проблему, поскольку поддержка python для IN довольно громоздка, и по сути вы должны предоставить столько же ? поскольку у вас есть ценности в вашей коллекции.

 selection = (100, 200, 300) questionmarks = '?' * len(selection) formatted_query = 'SELECT value1, value3 FROM myTable WHERE value2>? AND pageNum IN ({})'.format(','.join(questionmarks)) query_args = [10] query_args.extend(selection) result_set = c.execute(formatted_query, query_args) 

приведенный выше код должен делать, а также объясняет, что он делает:

Он по существу готовит заявление sql с таким количеством ? по мере необходимости, а затем выполняет запрос со всеми вашими аргументами, указанными в списке, поэтому sqlite позаботится об ускорении значений.

Если вы преобразуете свой запрос в строку, вам нужно будет убедиться, что вы сами дезинфицируете значения, которые не рекомендуется.