最近在写一个Python的文本分析,需要大量的读取数据库(千万级别mysql)并进行更新操作,运行着程序发现一个问题,过了一会儿程序就报错说链接已经满了,或者是端口不可重复使用,因此我在网上找到了一个连接池的代码用于解决这个问题,在此处贴出代码
本身是有配置文件的,因为我觉得在我的项目中不必要 所以就删除了
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
from dbutils.pooled_db import PooledDB
from pymysql.cursors import DictCursor
class MyPymysqlPool():
"""
MYSQL数据库对象,负责产生数据库连接 , 此类中的连接采用连接池实现获取连接对象:conn = Mysql.getConn()
释放连接对象;conn.close()或del conn
"""
# 连接池对象
__pool = None
def __init__(self):
# self.conf = Config().get_content(conf_name)
# super(MyPymysqlPool, self).__init__(**self.conf)
# 数据库构造函数,从连接池中取出连接,并生成操作游标
self._conn = self.__getConn()
self._cursor = self._conn.cursor()
def __getConn(self):
"""
@summary: 静态方法,从连接池中取出连接
@return MySQLdb.connection
"""
if MyPymysqlPool.__pool is None:
__pool = PooledDB(creator=pymysql,
mincached=1,
maxcached=20,
host='127.0.0.1',
port=3306,
user='root',
passwd='123123',
db='hotel_now',
use_unicode=False,
charset="utf8mb4",
cursorclass=DictCursor)