今天在尝试用下面的python代码对MySQL进行数据的插入、更新和删除时, 突然发现代码执行成功, 通过代码查询也显示数据已经插入或更新, 但是当我在MySQL客户端通过SQL语句查询时, 数据库中的数据一点变化都没有。 又反复实验了多次, 结果都是一样的。

1 #!/usr/bin/python

2 #Program:

3 #to get some information from mysql

4 importMySQLdb as mdb5 importsys6

7 conn = mdb.connect(host = 'localhost', user = 'root', passwd = '8023xue0526', db = 'contact')8

9 cur =conn.cursor()10 cur.execute("insert into contact values('222221', 'ni')")11 cur.execute("select * from contact")12 row_num =int(cur.rowcount)13 for i inrange(row_num):14 row =cur.fetchone()15 printrow16 cur =conn.cursor()17 conn.close()

通过在网上查找, 最终才有了一点眉目, 此问题与MySQL的存储引擎对事务的支持有关。 原来MySQL中有多种类型的存储引擎, 例如: MyISAM, InnoDB等。 MyISAM不支持事务处理, 而InnoDB是事务型数据库, 支持事务。  我的MySQL的默认存储引擎就是InnoDB, 所以对数据库数据的操作会在事先分配的缓存中进行, 只有在commit之后, 数据库的数据才会改变。 修改后的代码如下:

1 #!/usr/bin/python

2 #Program:

3 #to get some information from mysql

4 importMySQLdb as mdb5 importsys6

7 conn = mdb.connect(host = 'localhost', user = 'root', passwd = '8023xue0526', db = 'contact')8

9 cur =conn.cursor()10 cur.execute("insert into contact values('222221', 'ni')")11 cur.execute("select * from contact")12 row_num =int(cur.rowcount)13 for i inrange(row_num):14 row =cur.fetchone()15 printrow16 #在数据操作完成之后,进行commit,完成数据库的数据更新

17 conn.commit()18 cur =conn.cursor()19 conn.close()

但是以前在用MySQL C API 对数据库进行数据操作的时候没有这情况, 通过查看资料, autocommit变量的状态决定是否每次对数据操作之后自动commit, 在MySQL客户端里autocommit=ON时, 在客户端输入SQL语句, 每次都会自动执行一次commit。 我查看了自己的MySQL的autocommit为ON,  但是还是没搞清楚为什么同在InnoDB存储引擎下, autocommit=ON, 用C API 无需commit, 而用Python API 必须commit。     看到此文章的网友如果知道, 多谢你能给我解惑。。

python db.commit_python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。(待日后更新)...相关推荐

  1. 开启SQLServer数据库的CDC报错:无法更新元数据来指示已对数据库 XXX 启用了变更数据捕获

    开启SQLServer数据库的CDC时,运行报错: 无法更新元数据来指示已对数据库 XXX 启用了变更数据捕获.执行命令 'SetCDCTracked(Value = 1)' 时失败.返回的错误为 1 ...

  2. mysql数据库教程级联_Mysql实现级联操作(级联更新、级联删除)

    tablestu( sidint UNSIGNED primary keyauto_increment, namevarchar(20) not null) TYPE=InnoDB charset=u ...

  3. python数据分析之连接MySQL数据库并进行数据可视化

    大家好,我是带我去滑雪! 本期将熟悉MySQL数据库以及管理和操作MySQL数据库的数据库管理工具Navicat Premium,然后在python中调用MySQL数据库进行数据分析和数据可视化. 目 ...

  4. MySQL入门系列:数据的插入、删除和更新

    标签: MySQL入门 上集回顾 上集中介绍了让人眼花缭乱的查询方式,包括简单查询.子查询.链接查询.组合查询以及各种查询细节,可别忘了表里先得有数据,才能后查询才能有意义啊!之前我们只是简单介绍了数 ...

  5. mysql 更改 uf_SQL经典实例(四)插入、更新和删除

    插入默认值 定义表的某些列的默认值: create table D (id integer default 0); 所有的数据库都支持使用default关键字来显式地为某一列指定默认值: insert ...

  6. 线程导入大数据入库_大数据处理及分析该怎么做?用这款数据分析软件轻松搞定...

    ​对大数据的重视让很多企业都在纷纷寻找更好的大数据处理及分析方法?这款数据分析软件轻松搞定! 一.数据采集 虽然每天互联网都会产生大量的数据,对于企业来讲,要搜集对自己企业有用的数据才是真的大数据.首 ...

  7. 在DataTable中更新、删除数据

    在DataTable中选择记录 /*在DataTable中选择记录*//* 向DataTable中插入记录如上,更新和删除如下:* ----但是在更新和删除前,首先要找出要更新和删除的记录.* 一种方 ...

  8. Scott Mitchell 的ASP.NET 2.0数据教程之十七:: 研究插入、更新和删除的关联事件

    在ASP.NET 2.0中操作数据::研究插入.更新和删除的关联事件 导言 当使用GridView.DetailsView或FormView控件的内建插入.编辑或删除特征时,在用户添加一条新记录或更新 ...

  9. 帆软填报问题之填报显示提交成功,数据库却查不到数据

    1.在制作填报报表的时候,首先根据教程制作填报报表.具体步骤如下图: 示例: 先根据需求给报表添加控件,然后按照如图所示步骤设计模板填报属性 2.进入对应的数据库,新建表设置字段类型及长度 当我做完上 ...

最新文章

  1. C++中的explicitkeyword
  2. 相机标定 matlab opencv ROS三种方法标定步骤(1)
  3. Android中使用httpclient访问服务器,需要session功能
  4. vs2013调试linux程序,vs 2013调试的时候重启的解决方案
  5. python 数据分析找到老外最喜欢的中国美食【完整代码】
  6. 力扣-409 最长回文串
  7. 100套大数据可视化模板
  8. 斐讯K3c基于frp内网穿透
  9. 通过网店管家抓取奇门淘系订单数据
  10. Eclipse 官方简体中文语言包下载地址及安装方法
  11. 异常:Handler sending message to a Handler on a dead thread
  12. Springboot毕设项目基于协同过滤算法的体育用品推荐系统9s658java+VUE+Mybatis+Maven+Mysql+sprnig)
  13. 网站被劫持都有哪些方式
  14. 删除电脑中删不掉的文件或文件夹
  15. Verilog语言要素(二)
  16. 记一次导入环信聊天demo的过程
  17. 实时搜索引擎Elasticsearch(4)——Aggregations (聚合)API的使用
  18. Py遇到Bad key “text.kerning_factor“ on line 4 in
  19. 机器学习基础---降维方法---T分布随机近邻嵌入(TSNE)推导
  20. dedecms教程:织梦所有实用标签调用方法搜集整理

热门文章

  1. 简约几何海报背景设计素材,可盐可甜
  2. 设计素材 | 来一份秋高气爽——秋季促销海报
  3. C4d酷炫立体空间质感电商海报素材,紧抓时尚潮流
  4. UI设计素材模板|首页解析
  5. 「PPT模板」 商务UI风格
  6. 计算机与应用化学ppt,应用化学专用课件.ppt
  7. curl post https_Fiddler抓包13fiddler 抓包导出 curl 命令行
  8. c语言传入的指针无返回值,c语言 关于指针注意事项
  9. WEB的发展历程、Tomcat服务器、与HTTP协议
  10. ASN.1编解码:asn1c的版本分析-诺基亚