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

Python操作MySQL批量插入数据触发SyntaxError,该如何修复?

问题原因

你的SQL语句里,包裹Embarked字段值的单引号(比如'Q')和包裹整个SQL语句的单引号冲突了。Python解析代码时,遇到第一个内部单引号就会认为字符串已经结束,后面的内容直接变成无效语法,所以触发了SyntaxError。

解决办法

这里提供三种可行的修复方式,推荐用第三种:

方法1:双引号包裹整个SQL语句

把外层的单引号换成双引号,内部保留单引号,Python就能正确识别完整的SQL字符串:

try:
    cur.execute("insert into test(PassengerId,SibSp,Parch,Embarked) values(892,0,0,'Q'),(893,1,0,'S'),(894,0,0,'Q'),(895,0,0,'S'),(896,1,1,'S')")
    print('data inserted successfully')
except Exception as e:
    print(e)

方法2:转义内部单引号

在每个内部单引号前加反斜杠\,告诉Python这是字符串的一部分,不是结束标记:

try:
    cur.execute('insert into test(PassengerId,SibSp,Parch,Embarked) values(892,0,0,\'Q\'),(893,1,0,\'S\'),(894,0,0,\'Q\'),(895,0,0,\'S\'),(896,1,1,\'S\')')
    print('data inserted successfully')
except Exception as e:
    print(e)

方法3:参数化批量插入(推荐)

这是数据库操作的最佳实践,既能彻底避免引号冲突,还能防止SQL注入,批量插入效率也更高:

try:
    # 定义SQL模板,用%s作为MySQL的参数占位符
    sql = 'insert into test(PassengerId,SibSp,Parch,Embarked) values(%s,%s,%s,%s)'
    # 整理批量插入的数据
    data_list = [
        (892, 0, 0, 'Q'),
        (893, 1, 0, 'S'),
        (894, 0, 0, 'Q'),
        (895, 0, 0, 'S'),
        (896, 1, 1, 'S')
    ]
    # 执行批量插入
    cur.executemany(sql, data_list)
    print('data inserted successfully')
except Exception as e:
    print(e)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:55:26