Python MySQLdb更新查询失败

2024-06-09 23:16:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

你知道会发生什么吗?


Tags: selftrueexecutesqlreturn粘贴asquery
2条回答

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

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

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

类似于:

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

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

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

编辑:有一个entry in the MySQLdb FAQ可能是相关的。

相关问题 更多 >