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

Python脚本向MySQL表插入数据时遇字段及语法错误求助

问题分析与解决方法

第一个错误:Unknown column 'ip_address' in 'field list'

这个错误的核心是你的routers_status表中不存在ip_address这个列,或者列名拼写有误(比如写成ipaddress、IP_Address,MySQL在Linux系统下默认区分表名/列名大小写)。

解决步骤:

  • 登录MySQL客户端,执行以下命令查看表的真实结构:
    DESCRIBE routers_status;
    -- 或者
    SHOW COLUMNS FROM routers_status;
    
  • 将INSERT语句中的列名替换为查询到的真实列名,确保完全匹配(包括大小写、下划线等细节)。

第二个错误:SQL语法错误(添加单引号后)

给%s手动添加单引号是错误操作。mysql.connector的参数化查询会自动处理字符串类型的引号包裹,手动加引号会导致生成的SQL出现重复引号(比如''192.168.72.2''),触发语法错误。

解决步骤:

  • 恢复最初的参数化查询写法,不要给%s加任何引号:
    query = f"INSERT INTO {table_name} (真实列名1, 真实列名2, 真实列名3, 真实列名4, 真实列名5) VALUES (%s, %s, %s, %s, %s)"
    

修正后的完整代码示例

(假设表的列名确实是ip_address, longitude, latitude, hostname, status,如果实际列名不同请替换)

import mysql.connector

# 数据库连接配置
config = {
    'user': 'root',
    'password': 'pass',
    'host': 'localhost',
    'database': 'location'
}

cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()

table_name = 'routers_status'

# 清空表(一次commit即可)
truncate_query = f'TRUNCATE TABLE {table_name};'
cursor.execute(truncate_query)
cnx.commit()

# 使用正确列名的INSERT语句
query = f"INSERT INTO {table_name} (ip_address, longitude, latitude, hostname, status) VALUES (%s, %s, %s, %s, %s)"
values = ("192.168.72.2", "2.4706761837005615", "48.94111251831055", "router_1", "Up")
cursor.execute(query, values)
cnx.commit()  # 提交INSERT操作,否则数据不会写入数据库

# 关闭连接
cursor.close()
cnx.close()

print(f'数据上传到表 {table_name} 成功完成!')

注意:

  • 执行INSERT操作后必须调用cnx.commit(),否则数据不会持久化到数据库(原代码漏了这一步)。
  • 原代码中两次cnx.commit()是多余的,TRUNCATE后一次commit就足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:57:29