You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python SQLite编程:执行DELETE语句时参数(item,)加逗号的原因

为什么SQLite参数要写成(item,)这种带逗号的形式?

这其实是Python的语法特性在搞鬼,和SQLite本身关系不大~

你看,cursor.execute()方法的第二个参数要求传入一个可迭代对象(最常用的就是元组),用来对应SQL语句里的占位符(这里就是?)。但Python里有个容易踩坑的点:

  • 如果只写(item),这不是元组,只是给变量加了一对括号,本质上和直接写item没区别,它的类型就是item本身的类型(比如字符串、整数)。
  • 而(item,)才是Python创建单个元素元组的正确写法,只有加了这个逗号,Python才会把它识别成元组类型。

回到你的代码里,SQL语句里只有一个?占位符,所以需要传递一个包含单个元素的元组。如果去掉逗号写成(item),execute方法会把它当成单个参数值,而不是包含一个值的容器,这时候就会抛出参数数量不匹配的错误。

举个简单的类型验证例子就懂了:

item = "apple"
print(type((item)))   # 输出 <class 'str'>
print(type((item,)))  # 输出 <class 'tuple'>

说白了,这个逗号就是Python用来区分“带括号的表达式”和“单个元素元组”的标志,必须加上才能让参数传递符合execute方法的要求。

内容的提问来源于stack exchange,提问作者Asim Dinda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:10:59