Python插入MySQL数据不显示求助:代码执行后数据未入库
问题原因及解决方案
核心问题:未提交事务
MySQL Connector/Python 默认关闭自动提交(autocommit=False),执行INSERT语句后,必须手动调用connection.commit()才能将数据持久化到数据库,否则操作仅在当前会话临时生效,断开连接后数据会自动回滚。
修复后的完整代码
import mysql.connector connection = mysql.connector.connect(host='localhost', database='CLOTHdb', user='root', password='') # 建议明确指定列名,避免表结构变动导致出错 sql_insert_Query = "INSERT INTO PRODUCT_MASTER (prod_code, pname, price, pcolor, pdesc) VALUES (%s,%s,%s,%s,%s)" prod_code = int(input("Enter Product Code: ")) pname = input("Enter Product Name: ") price = float(input("Enter Product Price: ")) pcolor = input("Enter Product Color: ") pdesc = input("Enter Product Description: ") param = (prod_code, pname, price, pcolor, pdesc) cursor = connection.cursor() try: cursor.execute(sql_insert_Query, param) # 关键步骤:提交事务 connection.commit() print(f"数据插入成功,共影响 {cursor.rowcount} 行") # 执行查询验证插入结果 cursor.execute("SELECT * FROM PRODUCT_MASTER WHERE prod_code = %s", (prod_code,)) records = cursor.fetchall() print("\n已插入的产品信息:") for row in records: print("prod_code = ", row[0]) print("pname = ", row[1]) print("price = ", row[2]) print("pcolor = ", row[3]) print("pdesc = ", row[4], "\n") except Exception as e: # 出错时回滚事务,避免脏数据 connection.rollback() print(f"插入失败:{str(e)}") finally: # 释放数据库资源 cursor.close() connection.close()
其他注意事项
- 原代码中
cursor.fetchall()直接在INSERT后调用无效,因为INSERT语句不会返回结果集,需执行SELECT查询才能获取刚插入的数据。 - 添加异常处理和资源释放逻辑,可避免数据库连接泄漏,同时在出错时回滚事务保证数据一致性。
- 明确指定
INSERT语句的列名,能提升代码健壮性,防止表结构调整后出现字段不匹配的问题。
内容的提问来源于stack exchange,提问作者kokokoder
相关产品推荐
相关产品推荐

