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

向SQL数据库插入记录与DataFrame数据时出现MariaDB语法错误如何解决

你的代码存在3处SQL语法和pymysql使用规范错误:

  • MySQL/MariaDB的标识符(表名、字段名)如果需要包裹,必须使用反引号,不能用双引号",你用双引号包裹表名Site_Voltage不符合SQL语法要求,报错信息里的"Site_Voltage"`就是双引号被转义后的错误内容。
  • pymysql的参数化查询占位符%s不需要手动加引号,驱动会自动根据传入值的类型处理转义和引号包裹,你手动加"%s"会导致语法冲突。
  • cursor.execute的第二个参数需要传入序列类型(元组/列表),你直接传单个值row['V_MN']会被识别为可迭代对象拆分,需要改成单元素元组格式。

修正后的代码

import csv
import pandas as pd
import pymysql

# 数据库连接
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='password',
                             db='db')

cursor = connection.cursor()

sdata = pd.read_csv(r'/opt/data/data.csv')
sdf = pd.DataFrame(sdata, columns=['Site','t_date','t_time','V_MN'])

# 修正后的插入逻辑
for index, row in sdf.iterrows():
    cursor.execute('INSERT INTO `Site_Voltage`(v_mn) VALUES (%s)', (row['V_MN'],))

# 可选优化:替换上面的循环用批量插入,大幅提升写入效率
# insert_data = sdf['V_MN'].values.tolist()
# cursor.executemany('INSERT INTO `Site_Voltage`(v_mn) VALUES (%s)', [[x] for x in insert_data])

connection.commit()
# 用完记得关闭连接释放资源
cursor.close()
connection.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:01