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

Python中MySQL INSERT语句执行失败,datetime值错误求助

解决pymysql插入datetime时的1292错误

嘿,这个错误我太熟了!你遇到的pymysql.err.InternalError: (1292, "Incorrect datetime value: 'row[3]' for column 'date_added' at row 1"),核心问题很简单:你把Python变量row[3]当成字符串硬写到SQL语句里了,数据库收到的不是你CSV里的实际日期值,而是字符串'row[3]',这肯定不符合date_added字段的datetime格式要求啊!

错误原因拆解

从你的代码片段推测,你原来构造SQL的方式大概是这样的:

sql = "INSERT INTO articles2 (xxx, date_added) VALUES ('xxx', 'row[3]')"

这里的'row[3]'是直接作为固定字符串传入SQL的,数据库根本不知道这是Python里的变量,只会把它当成一个完全无效的日期字符串处理,自然就触发1292错误了。

正确的解决方法:用参数化查询

pymysql支持参数化查询,既可以避免SQL注入风险,还能自动处理数据类型匹配问题。修改你的代码如下:

import csv
import pymysql

def insert_articles2(rows):
    rowcount = 0
    # 假设你已经完成数据库连接的建立(conn = pymysql.connect(...))
    cursor = conn.cursor()
    for row in rows:
        if rowcount != 0:  # 跳过CSV的表头行
            # 用%s作为占位符,注意不要给占位符加引号
            sql = "INSERT INTO articles2 (col1, col2, date_added) VALUES (%s, %s, %s)"
            # 把row中对应位置的值作为参数元组传给execute方法
            cursor.execute(sql, (row[0], row[1], row[3]))
            rowcount += 1
    conn.commit()  # 记得提交事务
    cursor.close()
    conn.close()

额外注意事项

  • 确保CSV中row[3]的日期格式是MySQL认可的标准格式,比如'YYYY-MM-DD'或者'YYYY-MM-DD HH:MM:SS'。如果CSV里的日期格式不匹配,需要先在Python中转换:
    from datetime import datetime
    # 假设CSV里的日期是'2023/10/05'格式,转成MySQL支持的格式
    formatted_date = datetime.strptime(row[3], '%Y/%m/%d').strftime('%Y-%m-%d')
    # 再把formatted_date作为参数传入execute
    
  • 永远不要用字符串拼接的方式构造SQL语句,除了数据类型问题,还会带来严重的SQL注入漏洞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:57:52