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
相关产品推荐
相关产品推荐

