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

Python将KNN分类后的合并二维列表存入MySQL报错求修正

MySQL插入错误排查与修正方案

核心错误点分析

  1. Numpy类型不兼容:preds2作为numpy.ndarray,内部元素是numpy专属数值类型(如numpy.float64),mysql.connector无法直接解析这类非Python原生类型,会触发类型匹配错误。
  2. 参数传递格式错误:若INSERT语句未使用参数化占位符(%s),或用字符串拼接、错误占位符(如%f),会导致SQL语法错误。
  3. 数据结构不匹配:如果mergedata的子列表长度不是3,或字段顺序(纬度、经度、分类)与表定义的Latitude→Longitude→Class不一致,会触发字段数量/类型不匹配错误。
  4. 批量插入方式错误:用execute循环插入多条数据,不仅效率低,还容易因单条数据格式问题触发多次错误。

完整修正代码

1. 预处理数据(转换类型+保证结构)

# 将numpy数组转换为Python原生类型的列表
preds_list = preds2.tolist()
# 确保分类值为字符串(匹配表中Class字段的varchar类型)
preds_list = [str(item) for item in preds_list]

# 合并数据,严格匹配表字段顺序:Latitude, Longitude, Class
# 假设new_list的每个元素是[latitude, longitude](float类型)
mergedata = []
for lat_lon, cls in zip(new_list, preds_list):
    mergedata.append([lat_lon[0], lat_lon[1], cls])

2. 参数化批量插入数据

import mysql.connector
from mysql.connector import Error

# 替换为你的数据库配置
db_settings = {
    "host": "localhost",
    "database": "your_database_name",
    "user": "your_username",
    "password": "your_password"
}

try:
    conn = mysql.connector.connect(**db_settings)
    if conn.is_connected():
        cursor = conn.cursor()
        # 使用%s作为通用占位符(mysql.connector对所有字段类型都用%s)
        insert_sql = """INSERT INTO hasilclass (Latitude, Longitude, Class) VALUES (%s, %s, %s)"""
        
        # 批量插入,executemany比循环execute更高效且稳定
        cursor.executemany(insert_sql, mergedata)
        conn.commit()
        print(f"成功插入 {cursor.rowcount} 条记录")

except Error as err:
    print(f"错误信息: {err}")
finally:
    # 确保关闭连接
    if conn.is_connected():
        cursor.close()
        conn.close()

额外检查项

  • 确认new_list中的latitude和longitude是float类型:如果是字符串,先转换为float:
    new_list = [[float(lat), float(lon)] for lat, lon in new_list]
    
  • 若preds2是多维度数组,需先扁平化处理为一维列表,确保和new_list长度一致:
    preds_list = preds2.flatten().tolist()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:50:36