Python 的 MySQLdb 模块插入数据没有成功与 autocommit(自动提交)的关系

欢迎你们访问我本身架的博客站点 码厩技术博客 (Now码厩 http://www.markjour.com/html


用 MySQLdb 操做数据库,插入数据以后发现数据库中依然为空,不知缘由为什么。

开启 mysqld 的 log 设置项以后发现日志文档中更有执行 sql 语句,直接复制语句在客户端中执行也没有问题,那么为何经过 MySQLdb 的插入所有没有结果呢?

我怀疑是 MySQLdb 的问题,在日志文件中仔细的看了一遍运行的全部sql 语句,在创建链接以后还运行了这句:set autocommit=0。这句话的嫌疑很大,由于这个涉及到一个语句提交执行的问题,并且对于 commit 我有点印象,好像之前学习 MySQLdb 的时候,特地注意到了这点。无论怎样,这就找准了关键字:MySQLdb autocommit

根据网上搜到的结果,能够大概了解到,MySQLdb 在链接后关闭了自动提交,自动提交对于 innodb 引擎很重要,没有这个设置,innodb 引擎就不会真正执行语句。

解决的办法:
一、语句末尾加上“COMMIT;”
二、运行完语句,至少在关闭数据库以前提交一下,如:conn.commit()
三、数据库链接创建以后,设置自动提交,如:conn.autocommit(1)

只是不知道为何 innodb 会这样,多是由于这是一个事务型数据库引擎,没有提交就不会在服务器上执行,只会缓存在客户端上的缘故吧!

MySQL技术内幕:InnoDB存储引擎
这本书好像出到第二版了,这些关于数据库方面的知识,仍是要了解一下的。

参考
一、MySQLdb 插入数据失败?
http://luchanghong.com/database/2012/06/20/mysqldb-insert-data-failed.html
二、MySQLdb Python模块autocommit属性测试及测试过程当中关于数据库链接的理解
http://blog.csdn.net/gukesdo/article/details/7026371mysql

相关文章
相关标签/搜索