python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。(待日后更新)
今天在尝试用下面的python代码对MySQL进行数据的插入、更新和删除时, 突然发现代码执行成功, 通过代码查询也显示数据已经插入或更新, 但是当我在MySQL客户端通过SQL语句查询时, 数据库中的数据一点变化都没有。 又反复实验了多次, 结果都是一样的。
#!/usr/bin/python
#Program:
# to get some information from mysql
import MySQLdb as mdb
import sys conn = mdb.connect(host = 'localhost', user = 'root', passwd = '8023xue0526', db = 'contact') cur = conn.cursor()
cur.execute("insert into contact values('222221', 'ni')")
cur.execute("select * from contact")
row_num = int(cur.rowcount)
for i in range(row_num):
row = cur.fetchone()
print row
cur = conn.cursor()
conn.close()
通过在网上查找, 最终才有了一点眉目, 此问题与MySQL的存储引擎对事务的支持有关。 原来MySQL中有多种类型的存储引擎, 例如: MyISAM, InnoDB等。 MyISAM不支持事务处理, 而InnoDB是事务型数据库, 支持事务。 我的MySQL的默认存储引擎就是InnoDB, 所以对数据库数据的操作会在事先分配的缓存中进行, 只有在commit之后, 数据库的数据才会改变。 修改后的代码如下:
#!/usr/bin/python
#Program:
# to get some information from mysql
import MySQLdb as mdb
import sys conn = mdb.connect(host = 'localhost', user = 'root', passwd = '8023xue0526', db = 'contact') cur = conn.cursor()
cur.execute("insert into contact values('222221', 'ni')")
cur.execute("select * from contact")
row_num = int(cur.rowcount)
for i in range(row_num):
row = cur.fetchone()
print row
#在数据操作完成之后,进行commit,完成数据库的数据更新
conn.commit()
cur = conn.cursor()
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对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。(待日后更新)的更多相关文章
- 09Microsoft SQL Server 表数据插入,更新,删除
Microsoft SQL Server 表数据插入,更新,删除 向表中插入数据 INSERT INTO insert into tb1 values(0004,'张凤凤') insert into ...
- 在DataTable中更新、删除数据
/*在DataTable中选择记录*/ /* 向DataTable中插入记录如上,更新和删除如下: * ----但是在更新和删除前,首先要找出要更新和删除 ...
- AngularJS进阶(十一)AngularJS实现表格数据的编辑,更新和删除
AngularJS实现表格数据的编辑,更新和删除 效果 实现 首先,我们先建立一些数据,当然你可以从你任何地方读出你的数据 var app = angular.module('plunker', [' ...
- 数据批量插入MSSQL
MSSQL数据批量插入优化详细 序言 现在有一个需求是将10w条数据插入到MSSQL数据库中,表结构如下,你会怎么做,你感觉插入10W条数据插入到MSSQL如下的表中需要多久呢? 或者你的批量数据 ...
- MySQL高级查询与编程笔记 • 【第5章 常见数据库对象】
全部章节 >>>> 本章目录 5.1 视图 5.1.1 视图的定义 5.1.2 视图的优点 5.1.3 视图的创建和使用 5.1.4 利用视图解决数据库的复杂应用 5.1. ...
- MySQL基础之第11章 插入、更新与删除数据
11.1.插入数据 11.1.1.为表的所有字段插入数据 1.INSERT语句中不指定具体的字段名 insert into 表名 values (值1,值2…值n)2.INSERT语句 ...
- mysql根据查询结果批量更新多条数据(插入或更新)
mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...
- MySQL插入,更新,删除数据
插入 单行插入 1.insert into 表名 values(col1_value,col2_value,...); 每个列必须提供一个值,如果没有值,要提供NULL值 每个列必须与它在表中定义的次 ...
- 使用Python创建MySQL数据库实现字段动态添加以及动态的插入数据
应用场景: 我们须要设计一个数据库来保存多个文档中每一个文档的keyword. 假如我们每一个文档字符都超过了1000,取当中出现频率最大的为我们的keyword. 如果每个文档的keyword都超过 ...
随机推荐
- 偏远小渔村选手的noip2017游记
这次noip估计是我初中最后一次比赛了,毕竟初三狗还要准备中考,要是中考挂了就GG了. 在最终成绩的榜上,我看到我成绩400,非常意外(你们这群大佬赛前天天奶我,还好不是毒奶),更意外的是全省竟然只有 ...
- R语言笔记005——计算描述性统计量
数据的分布特征: 分布的集中趋势,反应各数据向其中心值靠拢或聚集的程度(平均数,中位数,四分位数,众数) 分布的离散程度,反应各数据远离其中心值的趋势(极差,四分位差,方差,标准差,离散系数) 分布的 ...
- Kafka+SparkStreaming+Zookeeper(ZK存储Offset,解决checkpoint问题)
创建一个topic ./kafka-topics.sh --create --zookeeper 192.168.1.244:2181,192.168.1.245:2181,192.168.1.246 ...
- Linux嵌入式 -- 内核 - 内存管理
1. 逻辑地址 线性地址 物理地址 段式管理: 16位CPU,20根地址总线,可寻址1M内存,但是只有16位的寄存器,64K. 逻辑地址 = 段基地址 + 段内偏移地址 物理地址 PA = 段 ...
- postgresql查看数据库占用的物理存储空间大小
1.手动查看: 查看数据库postgres的oid postgres=# SELECT oid from pg_database where datname='postgres'; oid------ ...
- 51nod 1163 贪心
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1163 1163 最高的奖励 基准时间限制:1 秒 空间限制:131072 ...
- java JDBC与MySQL 关于日间与日期
//MySQL Date类型 -> java.sql.Date java.sql.Date d = new java.sql.Date(Calendar.getInstance().getTim ...
- 原生js实现用鼠标画图
代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- mysql更改数据文件目录及my.ini位置。
需求:更改mysql数据数据文件目录及my.ini位置. 步骤: 1.查找my.ini位置,可通过windows服务所对应mysql启动项,查看其对应属性->可执行文件路径,获取my.ini路径 ...
- php操作EXCLE(通过phpExcle实现读excel数据)
<?phprequire_once('/PHPExcel/Reader/Excel2007.php');$objReader = new PHPExcel_Reader_Excel2007;$P ...