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

Python执行SQL查询遇参数传递错误,求正确写法

修正MySQL参数化查询的错误写法

你的错误根源是cursor.execute(*query, (tuple1,))这行代码的写法错误:

  • *query会把SQL字符串拆成单个字符作为参数传递,导致参数数量远超execute方法的预期,触发TypeError。
  • 同时你把参数元组又嵌套了一层(tuple1,),这也是多余的。

另外,SQL语句中'%s'的单引号需要去掉,参数化查询会自动处理字符串的类型转换和引号添加,手动加引号不仅没必要,还可能引发格式错误或SQL注入风险。

修正后的完整代码

startdate = input("Prosze podac poczatek przedzialu czasowego (format RRRR-MM-DD GG:MM:SS): ")
enddate = input("Prosze podac koniec przedzialu czasowego (format RRRR-MM-DD GG:MM:SS): ")

# 移除%s周围的单引号
query = "SELECT * FROM BRDB.RFX_IKW_MODIFY_EXEC_ORDER_CANCEL_LOG WHERE CREATION_DATETIME between %s and %s ORDER BY CREATION_DATETIME DESC;"

tuple1 = (startdate, enddate)
# 直接传递query和参数元组,不要用*拆包字符串,也不要嵌套元组
cursor.execute(query, tuple1)
records = cursor.fetchall()
print("Total number of rows in table: ", cursor.rowcount)
print(records)

关键修改点

  • SQL语句:将'%s'改为%s,让驱动自动处理参数的类型和格式。
  • execute调用:使用cursor.execute(query, 参数元组)的标准写法,避免错误的拆包和嵌套。

内容的提问来源于stack exchange,提问作者Marcin Ciszewski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:00:49