Python MySQL - SELECT有效但DELETE无效?

10 投票
4 回答
7893 浏览
提问于 2025-04-15 14:27

我刚开始学习Python和Python的MySQL适配器。我不太确定我是不是漏掉了什么明显的东西:

db = MySQLdb.connect(# db details omitted)
cursor = self.db.cursor()

# WORKS
cursor.execute("SELECT site_id FROM users WHERE username=%s", (username))
record = cursor.fetchone()

# DOES NOT SEEM TO WORK
cursor.execute("DELETE FROM users WHERE username=%s", (username))

有什么想法吗?

4 个回答

0

对于你上面的代码,

只需要加上一个调用 self.db.commit() 的语句。

这个功能可不是小问题:

它可以帮助你避免在查询出错时出现数据损坏的问题。

1

可能你违反了外键约束。

13

我猜你可能在使用一个支持事务的存储引擎,比如InnoDB,但在执行DELETE操作后没有调用db.commit()。如果你不进行提交,DELETE的效果就会被丢弃。

可以参考这个链接:http://mysql-python.sourceforge.net/FAQ.html#my-data-disappeared-or-won-t-go-away

从1.2.0版本开始,MySQLdb默认禁用了自动提交,这是DB-API标准(PEP-249)的要求。如果你使用的是InnoDB表或者其他类型的事务表,你需要在关闭连接之前调用connection.commit(),否则你的任何更改都不会被写入数据库。

还有一个类似的问题可以参考:Python MySQLdb更新查询失败

撰写回答