Python3向MySQL插入数据时遇Date列数据截断警告的求助
解决MySQL插入日期时的1265数据截断警告
嘿,我来帮你搞定这个烦人的警告!这个1265错误的核心原因很明确:MySQL的DATE类型字段只认YYYY-MM-DD格式的日期字符串,但你现在生成的datestr是MM/DD/YYYY(比如09/25/2024),这种格式数据库没法正确解析,就会触发数据截断的警告。
快速修复方案
你不用再手动拼接日期字符串了,datetime模块自带了更靠谱的方法:
方法1:用isoformat()直接生成标准格式
datetime.date对象的isoformat()方法会直接返回YYYY-MM-DD格式的字符串,一步到位:
from datetime import datetime today = datetime.date.today() datestr = today.isoformat() # 输出类似 "2024-09-25"
方法2:用strftime()自定义格式化
如果你想更直观地控制格式,用strftime()指定%Y-%m-%d即可:
from datetime import datetime today = datetime.date.today() datestr = today.strftime("%Y-%m-%d") # 同样输出 "2024-09-25"
完整优化后的代码示例
顺便给你补全插入操作的代码,记得用参数化查询(更安全,还能避免格式问题):
from datetime import datetime import pymysql today = datetime.date.today() datestr = today.isoformat() connection = pymysql.connect(host='localhost', user='root', password='', db='testdb') try: with connection.cursor() as cursor: # 用%s作为占位符,参数化插入(替换成你的表名和字段名) sql = "INSERT INTO your_table (name, numberone, numbertwo, numberthree, Date) VALUES (%s, %s, %s, %s, %s)" for item in resp['result']: data = (item['name'], item['numberone'], item['numbertwo'], item['numberthree'], datestr) cursor.execute(sql, data) connection.commit() finally: connection.close()
额外检查建议
- 确认你的数据库表中
Date列的类型确实是DATE(不是VARCHAR或其他类型),DATE类型会自动验证日期格式,更适合存储日期数据。 - 尽量避免手动拼接日期字符串,容易出错,用datetime模块的内置方法更可靠。
内容的提问来源于stack exchange,提问作者Sudhi
相关产品推荐
相关产品推荐

