利用单例的好处就是减少数据库的链接,不然在多次链接之后,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()