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

从.idx文件导数据到SQL遇ProgrammingError 1064(42000)报错求修复

修复MySQL INSERT语句语法错误的建议

错误原因分析

你遇到的ProgrammingError: 1064错误,根源是INSERT语句里的filenames字段值没有被单引号包裹。filenames的值是类似xxx.txt的字符串,MySQL要求字符串类型的字段值必须用单引号括起来,而你的代码里直接把文件名拼进SQL语句,导致语句变成VALUES(..., xxx.txt),违反了语法规则,所以报错提示near 'txt)'。

修复方案

方案1:修正字符串格式化写法

给filenames对应的占位符加上单引号,修改后的代码如下:

for row in content:
    if len(row)!= 0:
            row = row.strip('\n')
            if str(row).endswith(".txt"):
                columns = row.split("|")
                cik = columns[0]
                companyname = columns[1]
                formtype = columns[2]
                datefield = columns[3]
                filenames = columns[4]
                
                # 给filenames的占位符添加单引号
                query= "INSERT class.firmsreports (cik, companyname, formtype, datefiled, filenames) VALUES ('%(1)s', '%(2)s', '%(3)s', '%(4)s', '%(5)s')" %{"1": cik, "2": companyname, "3": formtype, "4": datefield, "5": filenames};
                cursor.execute(query)
                database.commit()

方案2:使用参数化查询(推荐)

字符串拼接SQL存在SQL注入风险,还容易出现转义问题,更安全的方式是用数据库驱动的参数化查询功能,让驱动自动处理字符串的引号和转义:

for row in content:
    if len(row)!= 0:
            row = row.strip('\n')
            if str(row).endswith(".txt"):
                columns = row.split("|")
                cik = columns[0]
                companyname = columns[1]
                formtype = columns[2]
                datefield = columns[3]
                filenames = columns[4]
                
                # 用%s作为占位符,参数放在execute的第二个参数元组中
                query= "INSERT INTO class.firmsreports (cik, companyname, formtype, datefiled, filenames) VALUES (%s, %s, %s, %s, %s)"
                cursor.execute(query, (cik, companyname, formtype, datefield, filenames))
                database.commit()

注意:这里的%s是MySQL驱动的参数占位符,不是Python字符串格式化符号,不需要加单引号;另外建议补上INSERT INTO关键字,部分MySQL版本要求必须书写该关键字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:20:35