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

使用pymysql将JSON文件数据导入MySQL数据库报错求助

问题排查与解决步骤
  • 第一步:修正SQL语句中带空格的字段名写法
    MySQL语法规定,包含空格、特殊字符的字段名必须用反引号`包裹,否则会被识别为多个关键字触发语法错误,这是你替换%s后仍然报错的核心原因之一。
  • 第二步:统一使用%s作为pymysql的占位符
    pymysql的参数化查询所有数据类型都统一使用%s作为占位符,不要用%d/%f等Python原生格式化符,框架会自动根据字段类型完成转义和类型适配。
  • 第三步:校验JSON数据的类型合法性
    你可以在循环内先打印每个字段的值和类型,排查是否存在数值字段取到空字符串、非数值格式字符串的情况,时间字段需要保证和MySQL表中datetime/time类型的格式匹配。
  • 第四步:添加异常捕获定位具体报错数据
    可以在插入逻辑外包裹异常捕获,打印报错的对应原始数据,快速定位脏数据问题。

修复后参考代码

import pymysql
import json

# 建议用with上下文管理文件读取,避免资源泄漏
with open("data_chart.json", "r", encoding="utf-8") as f:
    json_obj = json.load(f)

connection = pymysql.connect(
    host='替换为你的数据库主机地址',
    user='替换为你的数据库用户名',
    password='替换为你的数据库密码',
    database='替换为你的数据库名'
)

cursor = connection.cursor()

for item in json_obj:
    # 取值后做基础类型转换,可根据你表的实际字段类型调整
    Current_Fridge_Temp = float(item.get("Current Fridge Temperature")) if item.get("Current Fridge Temperature") else None
    Target_Fridge_Temp = float(item.get("Target Fridge Temperature")) if item.get("Target Fridge Temperature") else None
    Current_Freezer_Temp = float(item.get("Current Freezer Temperature")) if item.get("Current Freezer Temperature") else None
    Target_Freezer_Temp = float(item.get("Target Freezer Temperature")) if item.get("Target Freezer Temperature") else None
    E_Use = float(item.get("Energy Use")) if item.get("Energy Use") else None
    Fridge_Last_On = item.get("Fridge Last On Time")
    Fridge_Last_Off = item.get("Fridge Last Off Time")
    Freezer_Last_On = item.get("Freezer Last On Time")
    Freezer_Last_Off = item.get("Freezer Last Off Time")

    try:
        # 所有带空格的字段名用反引号包裹
        sql = """INSERT INTO refrigerator_id(
            `Current Fridge Temperature`,
            `Target Fridge Temperature`,
            `Current Freezer Temperature`,
            `Target Freezer Temperature`,
            `Energy Use`,
            `Fridge Last On Time`,
            `Fridge Last Off Time`,
            `Freezer Last On Time`,
            `Freezer Last Off Time`
        ) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
        cursor.execute(sql, (Current_Fridge_Temp, Target_Fridge_Temp, Current_Freezer_Temp, Target_Freezer_Temp, E_Use, Fridge_Last_On, Fridge_Last_Off, Freezer_Last_On, Freezer_Last_Off))
    except Exception as e:
        # 打印报错数据方便定位问题
        print(f"插入失败,当前待插入数据:{item},错误提示:{e}")

connection.commit()
cursor.close()
connection.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:18:01