黑帽联盟

 找回密码
 会员注册
查看: 3209|回复: 0

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

[复制链接]

908

主题

38

听众

3382

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    难过
    5 天前
  • 签到天数: 1704 天

    [LV.Master]伴坛终老

    在使用PYTHON mysqldb的时候插入数据发现 数据库没有你当前插入的数据,这时候实际上跟commit有关系

    用 MySQLdb 操作数据库,插入数据之后发现数据库中依然为空,不知原因为何。

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

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

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

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

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

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


    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部