我是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))
有什么想法吗?
答案 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