QDateEdit取值插入MySQL报错:日期值'1999'不符合字段要求
解决MySQL日期插入错误的方案
问题根源
你通过字符串格式化拼接SQL语句时,日期字符串未被引号包裹,MySQL会将2022-09-14当作算术表达式计算(2022 - 9 - 14 = 1999),导致数据库收到的是数值1999而非预期的日期字符串,触发了Incorrect date value错误。
修复方案
方案1:给日期字符串添加引号(不推荐,存在SQL注入风险)
在SQL模板的%s两侧添加单引号,确保日期以字符串形式传入:
query = "INSERT INTO `library` (acquired) VALUES ('%s')" % (gotit)
方案2:使用参数化查询(推荐,安全且避免格式问题)
不要直接拼接SQL字符串,利用MySQL Connector的参数化查询功能,让驱动自动处理参数的格式和转义:
query = "INSERT INTO `library` (acquired) VALUES (%s)" cursor = Functions.DBopen(self, dbname='books') cursor.execute(query, (gotit,)) # 参数需放在元组中,即使只有一个参数 idx = cursor.lastrowid()
额外优化:直接获取QDate对象
QDateEdit支持直接获取QDate对象,再转换为MySQL兼容的格式,避免依赖控件的显示设置:
# 获取控件的QDate对象并转为标准日期字符串 gotit_date = self.gotit_in.date() gotit = gotit_date.toString("yyyy-MM-dd") # 执行参数化插入 query = "INSERT INTO `library` (acquired) VALUES (%s)" cursor.execute(query, (gotit,))
内容的提问来源于stack exchange,提问作者user17565490
相关产品推荐
相关产品推荐

