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
相关产品推荐
相关产品推荐

