Python MySQLdb更新查询失败

时间:2009-06-22 18:14:46

标签: python mysql

好。我在这里构建了一个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

所有想法可能会发生什么?

2 个答案:

答案 0 :(得分:19)

我相信@Jason Creighton和@ S.Lott是正确的。

至少如果您要更新的表位于事务存储引擎上。 InnoDB是交易性的,ISAM不是。

您必须在关闭连接对象之前调用commit(),或者必须将连接设置为自动提交模式。我不确定你是如何为MySQLdb连接做的那样,我猜你要么为连接构造函数设置一个参数,要么在创建连接对象后设置一个属性。

类似的东西:

conn = mysql.connection(host, port, autocommit=True)

# or
conn = mysql.connection(host, port)
conn.autocommit(True)

答案 1 :(得分:16)

只是猜测:Python中的代码可能在事务中运行,而事务可能需要显式提交?

编辑:可能有一个entry in the MySQLdb FAQ