Python MySQL - SELECT工作但不是DELETE吗?

时间:2009-09-20 19:22:23

标签: python mysql select sql-delete

我是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 :(得分:12)

我猜你正在使用支持事务的存储引擎(例如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.com()   在关闭连接之前,或者   您的所有更改都不会被写入   到数据库。

另见这个类似的SO问题:Python MySQLdb update query fails

答案 1 :(得分:1)

也许您违反了外键约束。

答案 2 :(得分:0)

上面的代码, 只需添加对self.db.commit()的调用。

该功能远非烦恼:

它可以帮助您避免数据损坏问题 当你的查询中有错误时。

答案 3 :(得分:0)

问题可能是您没有提交更改。它可以通过 conn.commit()

详细了解here