Python 的 MySQLdb 模块的 autocommit

by Liu Yue/2012-05-20
最初在使用python读写数据库的时候,发现select语句可以读取到数据,insert语句执行后,数据库中却没有数据。将sql语句在mysql命令行直接执行是完全没有问题的,为什么使用MySQLdb执行insert语句会没有数据呢?

   看起来像是没有提交,立刻想到了mysql的autocommit,是不是没有提交事务?想到后立刻进行了验证,在执行insert语句后,又加了一行程序提交事务:connection.commit()。果然,insert语句生效了,数据库中有了数据。

    为了进一步证实MySQLdb模块会将autocommit功能关闭,看了mysql的日志,发现有set autocommit=0,进一步证实了,MySQLdb模块默认会关闭autocommit功能。如果不希望默认关闭,解决办法有几种:

1、显示执行SQL语句"COMMIT;" 
2、使用connection的commit方法:connection.commit() 
3、设置自动提交:connection.autocommit(1)