利用PooledDB创建mysql单例模式

时间:2024-02-19 12:30:19

利用单例的好处就是减少数据库的链接,不然在多次链接之后,mysql就会崩溃

直接上代码:

class Mysql(object):
    __instance = None

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = super(Mysql, cls).__new__(cls, *args, **kwargs)
        return cls.__instance

    def __init__(self):
        self.mysql = PooledDB(creator=pymysql, mincached=10, maxcached=20,
                              host=settings.MYSQL_HOST,
                              port=settings.MYSQL_PORT,
                              user=settings.MYSQL_USER,
                              passwd=settings.MYSQL_PASSWORD,
                              db=settings.MYSQL_DB,
                              charset=settings.MYSQL_CHARSET)

    def getAll(self, sql):
        _conn = self.mysql.connection()
        _cursor = _conn.cursor(cursor=pymysql.cursors.DictCursor)
        _cursor.execute(sql)
        result = _cursor.fetchall()
        _cursor.close()
        _conn.close()
        return result

    def save_all(self, sql):
        _conn = self.mysql.connection()
        _cursor = _conn.cursor(cursor=pymysql.cursors.DictCursor)
        _cursor.execute(sql)
        _conn.commit()
        _cursor.close()
        _conn.close()


mysql = Mysql()
PooledDB的参数:
1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接
2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接
3. maxconnections,最大的连接数,
4. blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错,
5. maxshared 当连接数达到这个数,新请求的连接会分享已经分配出去的连接
因为这里,在项目中都只用到了mysql这个变量,所以上面的几个参数的作用就没有永达理

 

以前的链接方式,这样每次执行sql完毕后,都要关闭链接

try:
    cursor.execute(sql)
finally:
    cursor.close()