在python3 中 使用from dbutils.pooled_db import PooledDB
基本配置如下
```python
def __init__(self,):
self.pool = PooledDB(
creator=pymysql, # 使用链接数据库的模块
mincached=10, # 初始化时,链接池中至少创建的链接,0表示不创建
maxconnections=200, # 连接池允许的最大连接数,0和None表示不限制连接数
blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
host=host,
port=port,
user=user,
password=password,
database=database,
#connection_timeout=600,
read_timeout=600,
write_timeout=600,
ping= 0,
)
查询代码
count = 300
while True:
dump("开始执行",2)
t1 = time.time()
sql = "select id,num,name, buy_rmb,buy_num,stock_user,sell_rmb,order_id,status from `record` where id = '1165'"
data = mysql.select_one(sql)
print(data)
t2 = time.time()
dump("耗时:%s"%(t2-t1),2)
dump("等待%s秒,再次查询 "%(count), 2)
time.sleep(count)
查询日志
2023-07-10 21:11:11.351 开始执行
{'id': 1165, 'num': '600748', 'name': '上实发展', 'buy_rmb': Decimal('4.14'), 'buy_num': 4500, 'stock_user': '信用29295', 'sell_rmb': Decimal('4.26'), 'order_id': '672137607', 'status': 2}
2023-07-10 21:11:11.379 耗时:0.0279998779296875
2023-07-10 21:11:11.379 等待300秒,再次查询
2023-07-10 21:16:11.380 开始执行
{'id': 1165, 'num': '600748', 'name': '上实发展', 'buy_rmb': Decimal('4.14'), 'buy_num': 4500, 'stock_user': '信用29295', 'sell_rmb': Decimal('4.26'), 'order_id': '672137607', 'status': 2}
2023-07-10 21:16:30.641 耗时:19.261474132537842
2023-07-10 21:16:30.641 等待300秒,再次查询
创建连接池,程序每间隔5分钟查询一次数据库,首次查询就非常快,0.02秒就可以完成,如果间隔300秒再查询,就需要约20秒才能完成,
如果连续查询就不会出现延时20秒这种情况,数据库只有几百条记录。同一时间用其他客户端执行sql语句,也是0.02秒左右就完成了。
唯独在python中,只要间隔超过300秒,首次查询就比较慢了。