class DBBaseHandle: def __init__(self): try: self.conn = MySQLdb.connect(host=syn_config.mysql_server.get('host'), user=syn_config.mysql_server.get('user'), passwd=syn_config.mysql_server.get('passwd'), db=syn_config.mysql_server.get('db'),charset=syn_config.mysql_server.get('charset')) self.cursor = self.conn.cursor() except Exception,e: logger.error('connect mysql error:%s'%e) self.conn = MySQLdb.connect(host=syn_config.mysql_server.get('host'), user=syn_config.mysql_server.get('user'), passwd=syn_config.mysql_server.get('passwd'), db=syn_config.mysql_server.get('db'),charset=syn_config.mysql_server.get('charset')) self.cursor = self.conn.cursor() def close(self): self.conn.close() self.cursor.close() def rollback(self): self.conn.rollback() class DBHandle(DBBaseHandle): def get_all_follow(self,uid): try: data = [] self.cursor.execute("select uid2 from user_following where uid=%s;"%uid) result = self.cursor.fetchall() if result: for res in result: data.append(res[0]) self.close() return data finally: ###添加了此处解决问题 self.conn.commit() ###添加了此处解决问题 class TestHandle(DBBaseHandle): def test(self,uid,vuids): try: for vuid in vuids: self.cursor.execute("insert into user_following(uid,uid2,follow_time) values(%s,%s,%s);"%(int(uid),int(vuid),int(time.time()))) return True #except : 唯一性错误 except Exception,e: logger.error('uid:%s,create follow error:%s'%(uid,e)) print e self.rollback() return False finally: self.conn.commit() if __name__ == "__main__": logger.info("start test ******************") d1 = DBHandle.get_all_follow(123) TestHandle().test(123,[1,2,3,4]) d2 = DBHandle.get_all_follow(123)
当代码中没有红色部分时,执行代码,d1与d2是一样的,这儿就是mysqldb存在缓冲的问题
解决方法:
1、语句末尾加上“COMMIT;”
2 、运行完语句,至少在关闭数据库之前提交一下,如:conn.commit()
3、数据库连接建立之后,设置自动提交,如:conn.autocommit(1)
mysql不同的存储引擎 对应的commit不同,所以要针对不同的存储引擎打开autocommit或关闭。MySQLdb 在连接后关闭了自动提交,自动提交对于 innodb 引擎很重要,没有这个设置,innodb 引擎就不会真正执行语句。
参考:http://www.cnblogs.com/coser/archive/2012/01/12/2320741.html
相关推荐
然而,批量操作时需要考虑数据大小和服务器缓冲区容量,以免引起缓冲溢出等问题。 #### 七、示例代码 以下是一个简单的示例,展示了如何使用 MySQLdb 连接到 MySQL 数据库并执行基本操作: ```python import ...
Python中的MySQLdb模块是用于与MySQL数据库交互的重要工具,它实现了Python数据库API规范,使得Python程序员可以方便地在Python程序中执行SQL语句并处理数据库操作。以下是对MySQLdb模块的一些关键知识点的详细说明...
针对Python MySQLdb模块使用utf-8编码插入中文数据时遇到的问题,本文将详细介绍如何在Python中设置MySQL数据库和表的UTF-8编码,如何在Python代码中指定连接的字符集,并且讲解在插入数据后确保数据能够正确保存到...
* 高效连接:Python代码使用了MySQLdb模块,提供了高效的MYSQL连接操作。 * 灵活可扩展:Python代码可以根据需要扩展和修改,添加新的功能和指标。 结论 本文档介绍了使用Python语言连接MYSQL数据库,统计常用的...
11. **数据库操作**:理解SQL语言,熟悉Python的数据库接口如SQLite、MySQLdb或pymongo,知道如何进行数据查询、插入、更新和删除。 12. **数据分析与可视化**:对于数据科学家角色,可能会考察Pandas库的数据处理...
根据提供的文档信息,本文将详细解析如何使用Python实现一个简易的SYSLOG服务器,并将接收到的日志信息存储到MySQL数据库中的技术方案。 ### 一、SYSLOG简介 SYSLOG是一种广泛应用于网络设备和服务器系统中进行...
面试时,除了技术知识,还会考察应聘者的问题解决能力、代码规范性、项目经验和团队协作能力。对于实际问题的解决思路,以及对新技术的敏感度和学习能力,也是面试官常常关注的点。通过深入理解和实践这些知识点,...
本案例中使用的是Python语言,并且选择了一个常用的SQL Server数据库连接库`pymssql`(对于Python 2.x版本则使用`MySQLdb`)。此外,还需要用到Python内置的文件操作功能来实现数据的批量写入。 #### 三、关键步骤...
在Python中,与MySQL数据库进行交互时,pymysql是一个常用的模块,特别是在Python 3.x环境下,因为MySQLdb不支持Python 3。pymysql提供了类似MySQLdb的接口,使得开发者能够轻松地执行SQL语句、获取数据以及管理...
Python的`try/except`语句可以捕获并处理运行时可能出现的异常,确保程序在遇到问题时能够优雅地处理,而不是突然崩溃。 9. **单元测试**:为确保代码质量,项目可能包含单元测试,如使用`unittest`或`pytest`库。...
编写Python脚本`process_youyuan_mysql.py`,导入所需的库,如json、redis和MySQLdb。连接MySQL数据库,同样使用`blpop`方法从Redis获取数据,通过游标执行SQL INSERT语句将数据插入MySQL表中。注意处理可能的MySQL...