Python MySQLdb更新查询失败

sqr*_*ram 13 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)
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

那么任何想法可能会发生什么?

cod*_*ape 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)
Run Code Online (Sandbox Code Playgroud)

  • 是的!你的第二个猜测是正确的 - conn.autocommit(True)有效(虽然显式提交仍然更好;-). (2认同)

Jas*_*ton 16

只是一个猜测:也许Python中的代码在事务中运行,并且事务可能需要显式提交?

编辑:MySQLdb FAQ中有一个可能相关的条目.

  • +1:没有提交意味着更改对其他人都是不可见的. (2认同)