Что плохого в этом простом коде оператора sqlite select в python для создания этой ошибки привязки? - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть этот простой код SQLite на Python.

box = 'XDS.SI'
sqlite_cur.execute('''
                   SELECT id from box_infos WHERE box = ?;
                   ''', box
                   )

Я получаю следующую ошибку;

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 3 supplied.

Когда я запускаю простой оператор выбора по-другому,

sqlite_cur.execute('''
                   SELECT id from box_infos WHERE box = 'XDS.SI';
                   '''
                   )    

Я не получил ошибки. Что не так с первым сегментом кода? Оба выглядят одинаково.

Я использую sqlite3 и python v3.6

1 Ответ

0 голосов
/ 15 сентября 2018

Я отвечу на свой вопрос, благодаря комментарию от roganjosh. Цель (box,) - сделать его кортежем.

Еще раз спасибо roganjosh, причина для того, чтобы сделать его кортежом, состоит в том, что курсор ожидает, что будет предоставлена ​​последовательность параметров, и, естественно, распаковывает любой заданный аргумент. В случае единственного параметра, который оказывается строкой, он начнет распаковывать эту строку и обнаружит, что ее недостаточно? для размещения каждого персонажа. После того, как вы предоставите одноэлементный кортеж, он найдет полную строку в первом индексе, а затем больше ничего не будет распаковано. В этом случае это итерация контейнера, а не строки

box = 'XDS.SI'
sqlite_cur.execute('''
                   SELECT id from box_infos WHERE box = ?;
                   ''', (box,)
                   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...