python操作mysql进行更新的时候,必须有commit
2012-09-10 20:42
429 查看
今天在写python操作mysql的时候,出现了一个奇怪的现象,在用python代码执行update的时候,代码返回已经更新成功,但是数据库表里的字段的值却没有改变,一直没有找到错误的原因,结果寻求身边同事的帮助,问题解决,在此做个记录;
MysqlHelper.py 代码如下
我在其它的文件中调用
a.py
现象: print res 可以正确返回1,说明更新数据库成功;
print result 也可以取到刚刚更新的值;
但是数据库表中的值没有变更;
原因:
python 操作mysql 是用 事物的方式来实现的,所以在update 的时候 必须有commit 提交的过程,否则数据表不会生效;
修改后的代码如下:
b.py
MysqlHelper.py 代码如下
#! /usr/bin/python # -*- coding: utf-8 -*- HOST = '127.0.0.1' PORT = 3306 USER = 'test' PASSWORD = 'test123' DBNAME = 'test' CHARSET = 'utf8' def connect(): try: import MySQLdb except ImportError, e: #print e return None try: cxn = MySQLdb.connect(host=HOST, user=USER, passwd=PASSWORD,port=PORT,db=DBNAME,charset=CHARSET) #print cxn return cxn except MySQLdb.Error,e: print "Mysql Error %d: %s" % (e.args[0], e.args[1]) # 插入操作 def insert_one(cur,sql,value): res = cur.execute(sql ,value) # 插入成功,res 返回值为1 if 1 != res : print 'failed' else: print 'success' def insert_many(cur,sql,values): res = cur.executemany(sql ,values) # 插入成功,res 返回值为1 if 1 != res : print 'failed' else: print 'success' getRC = lambda cur: cur.rowcount if hasattr(cur,'rowcount') else -1 # 更新操作 def update(cur,sql,params): cur.execute(sql , params) return getRC(cur) # 删除操作 def delete(cur,sql,params): cur.execute(sql,params) return getRC(cur) # 只获取一条记录,返回的是一个元组 def fetch_one(cur,sql): count = cur.execute(sql) #print count result = cur.fetchone(); return result # 获取多条数据;返回的是二维元组; def fetch_all(cur,sql): count = cur.execute(sql) #print count results = cur.fetchall(); ''' print results for r in results: print r ''' return results # 提交的完成操作 def finish(cxn): cxn.commit() cxn.close()
我在其它的文件中调用
a.py
import MysqlHelper# 获取数据库各个表的主键 def getTablePrimaryKey(tablename): cxn = MysqlHelper.connect() cur = cxn.cursor() res = MysqlHelper.update(cur,"UPDATE table_primary_index "+ "SET index_primary_value=index_primary_value+1"+ " WHERE index_table_name =%s" , (tablename)) print res result = MysqlHelper.fetch_one(cur,"SELECT * FROM table_primary_index WHERE index_table_name='%s'" % tablename) print result
现象: print res 可以正确返回1,说明更新数据库成功;
print result 也可以取到刚刚更新的值;
但是数据库表中的值没有变更;
原因:
python 操作mysql 是用 事物的方式来实现的,所以在update 的时候 必须有commit 提交的过程,否则数据表不会生效;
修改后的代码如下:
b.py
# 获取数据库各个表的主键 def getTablePrimaryKey(tablename): cxn = MysqlHelper.connect() cur = cxn.cursor() res = MysqlHelper.update(cur,"UPDATE table_primary_index "+ "SET index_primary_value=index_primary_value+1"+ " WHERE index_table_name =%s" , (tablename)) print res result = MysqlHelper.fetch_one(cur,"SELECT * FROM table_primary_index WHERE index_table_name='%s'" % tablename) print result MysqlHelper.finish(cxn) return result[1]
相关文章推荐
- python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。(待日后更新)
- mysql学习总结一当数据不存在的时候插入,存在的时候进行更新,删除重复数据
- Mysql 批量更新操作的时候出错 “Multi-statement transaction required more than 'max_binlog_cache_size' bytes of s
- python 使用mysql进行操作
- LINQ 表必须有主键才能进行更新操作
- 使用my97对区间日期进行操作的时候,后一个时间必须大于前一个时间,并且不可以超过当前的时间
- Python中对MySQL进行操作
- mysql关联多表进行update更新操作
- 使用Python对MySQL进行相关操作
- python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查
- mysql关联多表进行update更新操作
- Python操作Oracle、Mysql及文本进行数据处理
- python用post方法,向solr进行删除,更新,插入操作
- mysql关联多表进行update更新操作
- 当两个表关联的时候还要进行更新操作要怎么办呢
- Python在mysql中进行操作是十分容易和简洁的
- python连接mysql并进行操作代码
- mysql 对同一个表进行更新操作
- mysql 在数据时间到期时候进行自动增加一年操作 3ff8
- 使用Python程序对MySQL进行操作