好吧。我在这里构建了一个mysql查询浏览器,比如navicat。使用MySQLdb执行查询。
奇怪的是。当我在程序中运行查询(使用MySQLdb)时,它给了我成功,受影响的行数为1,但是当我在phpmyadmin中查看它时,值没有改变。
因此,在执行查询之前,我将其打印出来,复制并粘贴到phpmyadmin的查询窗口中,点击go,它就可以工作了。长话短说,更新查询不起作用,但当我复制并粘贴到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
你知道会发生什么吗?
我相信@Jason Creighton和@S.Lott是正确的。
至少,如果要更新的表位于事务性存储引擎上。
InnoDB
是事务性的,ISAM
不是。在关闭连接对象之前,必须对其调用
commit()
,或者必须将连接设置为自动提交模式。对于MySQLdb连接,我不确定您是如何做到这一点的,我猜您要么为连接构造函数设置一个参数,要么在创建连接对象之后设置一个属性。类似于:
只是猜测一下:也许Python中的代码是在事务中运行的,而该事务可能需要显式提交?
编辑:有一个entry in the MySQLdb FAQ可能是相关的。
相关问题 更多 >
编程相关推荐