使用mysql-connector-python执行MySQL INSERT语句无法保存数据问题
MySQL插入数据失败问题修复方案
存在的问题
- 变量名与方法调用错误
代码中定义的数据库连接对象变量名为connection,但获取游标时误用了未定义的cnx变量,且获取游标需调用.cursor()方法而非.connection()方法,若实际运行无报错可确认是编写示例时的笔误。 - 未手动提交事务
mysql-connector-python默认关闭自动提交配置,执行INSERT、UPDATE、DELETE这类DML语句后,必须调用连接对象的.commit()方法提交事务,数据才会持久化写入数据库,未提交的事务在连接关闭后会自动回滚,因此你看不到写入的数据。 - 调用
fetchall()不符合语法规则fetchall()用于读取SELECT查询返回的结果集,INSERT语句没有返回的查询结果,调用后自然返回空列表[],属于正常现象。 - 主键值为2的原因
MySQL自增主键的计数不会随事务回滚回退,你之前运行Python代码时虽然事务最终回滚,但INSERT语句执行时已经占用了一次自增ID(值为1),因此后续手动执行INSERT时,自增ID就从2开始计数。
修正后代码
import mysql.connector # 建立数据库连接 connection = mysql.connector.connect(user="root", database="test_db") # 获取游标 cursor = connection.cursor() try: cursor.execute("INSERT INTO category (category_name) VALUES ('test')") # 提交事务 connection.commit() # 可通过rowcount查看受影响行数 print(f"插入成功,受影响行数:{cursor.rowcount}") except Exception as e: # 异常时回滚事务 connection.rollback() print(f"插入失败,错误信息:{e}") finally: # 释放资源 cursor.close() connection.close()
内容的提问来源于stack exchange,提问作者user16827333
相关产品推荐
相关产品推荐

