python - 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
解决方案
感谢 roganjosh 的评论,我将回答我自己的问题。的目的(box,)
是使它成为一个元组。
再次感谢 roganjosh,将其设为元组的原因是游标期望提供一系列参数,并且自然地解包它给出的任何参数。在单个参数恰好是字符串的情况下,它将开始解包该字符串并发现没有足够的 ? 以适应每个字符。一旦你提供了一个单项元组,它就会在第一个索引处找到完整的字符串,然后就没有其他东西可以解包了。在这种情况下,它正在迭代容器,而不是字符串
box = 'XDS.SI'
sqlite_cur.execute('''
SELECT id from box_infos WHERE box = ?;
''', (box,)
)
推荐阅读
- branch.io - 通过 Branch.IO 分享到谷歌消息时看不到整个图像
- python - 在 Kivy 中使用外部输入库
- sql - 需要以下格式的正确输出
- java - 使用计时器依次显示一组 JButtons [JAVA SWING]
- sql - 使用 CASE TERADATA 插入空表
- git-bash - Windows 上的 git-bash 中的 push、pull 等命令会无限期冻结
- json - 针对 XML 或 XSD 验证转换后的 JSON
- dart - 如果我在 if 语句中使用 'is' 关键字,Dart 如何自动向上转换
- python - 如何通过 Tuning 改进深度学习
- javascript - 如何识别和响应 BTTV/FFZ/Twitch 表情?