Python MySQLdb 更新查询失败
好的,我这里做了一个MySQL查询浏览器,类似于navicat。使用MySQLdb来执行查询。
这里有个奇怪的地方。当我通过程序运行查询(使用MySQLdb)时,它告诉我成功了,受影响的行数是1,但当我在phpmyadmin查看时,值并没有改变。
所以在我执行查询之前,我把查询打印出来,复制粘贴到phpmyadmin的查询窗口,点击执行就能成功。所以简单来说,更新查询没有效果,但当我复制粘贴到phpmyadmin时,它就能正常工作。
self.tbl.sql.use(self.tbl.database) # switches to correct database. I've printed this and it uses the corrected db
if self.tbl.sql.execute(query) == True:
print sql_obj.rows_affected() # returns 1 (since i only do 1 query)
这是SQL类的一部分
def execute(self, query):
try:
self.cursor.execute(query)
return True
except MySQLdb.ProgrammingError as error:
print "---->SQL Error: %s" % error
return False
except MySQLdb.IntegrityError as e:
print "--->SQL Error: %s" % e
return False
那么,有什么想法可能发生了什么吗?
2 个回答
20
我觉得@Jason Creighton和@S.Lott说得对。
至少如果你要更新的表是在一个支持事务的存储引擎上。InnoDB
是支持事务的,而ISAM
则不是。
你要么在关闭连接之前调用commit()
,要么就得把连接设置为自动提交模式。我不太确定在MySQLdb连接中怎么做,我想你可以在创建连接的时候设置一个参数,或者在创建连接对象后设置一个属性。
大概是这样的:
conn = mysql.connection(host, port, autocommit=True)
# or
conn = mysql.connection(host, port)
conn.autocommit(True)
16
我猜测:也许这段Python代码是在一个事务中运行的,而这个事务可能需要被明确地提交?
补充:在MySQLdb的常见问题解答中,有一条可能相关的内容。