首页 > 解决方案 > python中这个简单的sqlite select语句代码产生这个绑定错误有什么问题?

问题描述

我在 python 中有这个简单的 SQLite 代码。

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

标签: pythonsqlpython-3.xsqlite

解决方案


感谢 roganjosh 的评论,我将回答我自己的问题。的目的(box,)是使它成为一个元组。

再次感谢 roganjosh,将其设为元组的原因是游标期望提供一系列参数,并且自然地解包它给出的任何参数。在单个参数恰好是字符串的情况下,它将开始解包该字符串并发现没有足够的 ? 以适应每个字符。一旦你提供了一个单项元组,它就会在第一个索引处找到完整的字符串,然后就没有其他东西可以解包了。在这种情况下,它正在迭代容器,而不是字符串

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

推荐阅读