zoukankan      html  css  js  c++  java
  • python单例与数据库连接池

     单例:专业用来处理连接多的问题(比如连接redis,zookeeper等),全局只有一个对象

    单例代码
    def
    singleton(cls): instances = {} def _singleton(*args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) return instances[cls] return _singleton

    实例代码

    from singleton import singleton
    
    #@singleton
    class  MysqlOpers:
        
        def __init__(self):
            print('建立mysql连接')
            #伪代码  self.db = MySQLdb.connect()
            
        def select(self):
            pass
        
    m = MysqlOpers()
    n = MysqlOpers()
    c = MysqlOpers()
    
    print(id(m))
    print(id(n))
    print(id(c))

    加上单例装饰器后

    mysql 连接池

    #coding=utf-8
    
    import traceback
    
    import MySQLdb
    from DBUtils.PooledDB import PooledDB
    
    
    db_pool_ins = None
    
    #需要替换用户名,密码等
    class DBPool():
        def __init__(self):
            self.pool = PooledDB(creator=MySQLdb, mincached=1, maxcached=10, maxconnections=100, blocking=True, 
                                 host= "127.0.0.1", port=3306, user='', passwd='',
                                 db='test', charset='utf8',)
    
        def get_connection(self):
            return self.pool.connection()
    
    
    class DBAction():
        #连接池对象
        def __init__(self):
            #建立和数据库系统的连接
            global db_pool_ins
            if db_pool_ins == None:
                db_pool_ins = DBPool()
            self.conn = db_pool_ins.get_connection()
            #获取操作游标
            self.cursor = self.conn.cursor()
    
        def close_database(self):
            self.cursor.close()
            self.conn.close()
    
        def data_operate(self, sql, params=()):
            '''
            数据的插入,更新,删除
            :param database:
            :param sql:
            :return: 成功:0,失败:1
            '''
            try:
                self.cursor.execute(sql, params)
                self.conn.commit()
                return 0
            except:
                print("sql is %s, params is %s error. %s" % (sql, params, traceback.format_exc()))
                self.conn.rollback()
                raise Exception
    
        def data_operate_many(self, sql, params=()):
            '''
            数据的插入,更新,删除
            :param sql:
            :param params:
            :return: 成功:0,失败:1
            '''
            #执行sql语句
            self.cursor.executemany(sql, params)
            #提交到数据库执行
            self.conn.commit()
    
        def data_operate_count(self, sql, params=()):
            '''
            数据的插入,更新,删除
            :return: 受影响的条数
            '''
            #执行sql语句
            count = self.cursor.execute(sql, params)
            #提交到数据库执行
            self.conn.commit()
            return count
    
        def data_inquiry(self, sql, size=10, params=()):
            '''
            :param database:
            :param sql:
            :return: ((),(),...,())
            '''
            self.cursor.execute(sql, params)
            result = self.cursor.fetchmany(size)
            return result
    
        def data_inquiry_all(self, sql, params=()):
            '''
            :param database:
            :param sql:
            :return: ((),(),...,())
            '''
            self.cursor.execute(sql, params)
            result = self.cursor.fetchall()
    
            return result
    
        def commit(self):
            self.conn.commit()

    使用


    from mysql import DBAction

    dba = DBAction()
    ret = dba.data_inquiry_all("SELECT * FROM friend")
    print(ret)

  • 相关阅读:
    redis缓存问题解决方案
    JVM 2-垃圾收集及内存分配策略
    JVM 1-内存管理
    mysql数据库基础
    事务学习
    使用redis分布式锁来解决集群项目的定时任务冲突问题
    Spring AOP学习
    Spring IOC
    java语言基础7--线程相关类
    多重背包的二进制优化——DP
  • 原文地址:https://www.cnblogs.com/hellojackyleon/p/9822006.html
Copyright © 2011-2022 走看看