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

