MySQL:如何向表永久插入数据及INSERT INTO仅生效一次问题处理
问题根因说明
- 插入数据不持久、删除插入代码后数据丢失:你使用的Python数据库驱动默认关闭了自动事务提交,执行完INSERT语句后没有主动提交事务,程序断开数据库连接时未提交的变更会直接回滚,导致数据没有真正写入数据库。
- INSERT只能生效一次:你的
PersonID字段大概率是主键/唯一索引,主键不允许重复值写入,第二次插入相同的1234会触发唯一约束冲突,语句执行失败。 - 你写的条目存在判断逻辑完全错误:
cursor.execute()方法仅负责执行SQL语句,不会返回查询结果,你直接判断它的返回值是否为None永远得不到正确结果。
可行解决方案
1. 解决数据持久化问题
执行完写入类SQL(INSERT/UPDATE/DELETE)后,调用数据库连接对象的commit()方法提交事务即可,示例流程:
# 假设你的数据库连接对象名为mydb mycursor.execute("INSERT INTO Points(PersonID, Balance) VALUES(1234, 0)") mydb.commit() # 新增这行提交事务
提交完成后数据会永久存储在数据库中,哪怕你后续删除插入代码,数据也会保留直到手动执行删除语句。
2. 解决重复插入报错问题
如果需要程序启动时自动初始化不存在的用户数据,不需要手动判断再插入,直接使用INSERT IGNORE语法即可,会自动忽略重复主键的写入请求,不会报错:
mycursor.execute("INSERT IGNORE INTO Points(PersonID, Balance) VALUES(1234, 0)") mydb.commit()
3. 修正条目存在判断逻辑
执行完SELECT语句后需要调用fetchone()方法取一条查询结果,再判断结果是否为空:
mycursor.execute("SELECT 1 FROM Points WHERE PersonID=1234 LIMIT 1") # 查1比查*性能更好 result = mycursor.fetchone() if result is None: print("None") else: print("Some")
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

