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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:20:19