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

