`
sls0919
  • 浏览: 125870 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python用mysqldb时查询缓冲问题

 
阅读更多

 

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

 

 

 

分享到:
评论

相关推荐

    课题-Python-MySQLdb-学习总结.docx

    然而,批量操作时需要考虑数据大小和服务器缓冲区容量,以免引起缓冲溢出等问题。 #### 七、示例代码 以下是一个简单的示例,展示了如何使用 MySQLdb 连接到 MySQL 数据库并执行基本操作: ```python import ...

    课题-Python-MySQLdb-学习总结.doc.docx

    Python中的MySQLdb模块是用于与MySQL数据库交互的重要工具,它实现了Python数据库API规范,使得Python程序员可以方便地在Python程序中执行SQL语句并处理数据库操作。以下是对MySQLdb模块的一些关键知识点的详细说明...

    Python MySQLdb 使用utf-8 编码插入中文数据问题

    针对Python MySQLdb模块使用utf-8编码插入中文数据时遇到的问题,本文将详细介绍如何在Python中设置MySQL数据库和表的UTF-8编码,如何在Python代码中指定连接的字符集,并且讲解在插入数据后确保数据能够正确保存到...

    python统计MYSQL常用的一些性能参数指标.pdf

    * 高效连接:Python代码使用了MySQLdb模块,提供了高效的MYSQL连接操作。 * 灵活可扩展:Python代码可以根据需要扩展和修改,添加新的功能和指标。 结论 本文档介绍了使用Python语言连接MYSQL数据库,统计常用的...

    Python面试题目:2019年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。

    11. **数据库操作**:理解SQL语言,熟悉Python的数据库接口如SQLite、MySQLdb或pymongo,知道如何进行数据查询、插入、更新和删除。 12. **数据分析与可视化**:对于数据科学家角色,可能会考察Pandas库的数据处理...

    python 实现简单的SYSLOG服务器,并写入MYSQL数据库.docx

    根据提供的文档信息,本文将详细解析如何使用Python实现一个简易的SYSLOG服务器,并将接收到的日志信息存储到MySQL数据库中的技术方案。 ### 一、SYSLOG简介 SYSLOG是一种广泛应用于网络设备和服务器系统中进行...

    110道Python面试题汇总

    面试时,除了技术知识,还会考察应聘者的问题解决能力、代码规范性、项目经验和团队协作能力。对于实际问题的解决思路,以及对新技术的敏感度和学习能力,也是面试官常常关注的点。通过深入理解和实践这些知识点,...

    Python从数据库读取大量数据批量写入文件的方法

    本案例中使用的是Python语言,并且选择了一个常用的SQL Server数据库连接库`pymssql`(对于Python 2.x版本则使用`MySQLdb`)。此外,还需要用到Python内置的文件操作功能来实现数据的批量写入。 #### 三、关键步骤...

    Python使用pymysql小技巧

    在Python中,与MySQL数据库进行交互时,pymysql是一个常用的模块,特别是在Python 3.x环境下,因为MySQLdb不支持Python 3。pymysql提供了类似MySQLdb的接口,使得开发者能够轻松地执行SQL语句、获取数据以及管理...

    仿博客园系统.zip

    Python的`try/except`语句可以捕获并处理运行时可能出现的异常,确保程序在遇到问题时能够优雅地处理,而不是突然崩溃。 9. **单元测试**:为确保代码质量,项目可能包含单元测试,如使用`unittest`或`pytest`库。...

    分布式爬虫处理Redis里的数据操作步骤

    编写Python脚本`process_youyuan_mysql.py`,导入所需的库,如json、redis和MySQLdb。连接MySQL数据库,同样使用`blpop`方法从Redis获取数据,通过游标执行SQL INSERT语句将数据插入MySQL表中。注意处理可能的MySQL...

Global site tag (gtag.js) - Google Analytics