You need to enable JavaScript to run this app. MySQL:如何向表永久插入数据及INSERT INTO仅生效一次问题处理
优惠活动
大模型
产品
解决方案
定价
更多

MySQL:如何向表永久插入数据及INSERT INTO仅生效一次问题处理

问题根因说明

  1. 插入数据不持久、删除插入代码后数据丢失:你使用的Python数据库驱动默认关闭了自动事务提交,执行完INSERT语句后没有主动提交事务,程序断开数据库连接时未提交的变更会直接回滚,导致数据没有真正写入数据库。
  2. INSERT只能生效一次:你的PersonID字段大概率是主键/唯一索引,主键不允许重复值写入,第二次插入相同的1234会触发唯一约束冲突,语句执行失败。
  3. 你写的条目存在判断逻辑完全错误: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:18:03