利用python list完成最简单的DB连接池方法


Posted in Python onAugust 09, 2019

先来看查看效果:

利用python list完成最简单的DB连接池方法

在代码连接数据库后,并且执行三条sql后,将mysql直接重启掉,故我们的连接池连接均是不ok的,所以,它会全部删除再抓新的连接下来,重启mysql命令:

利用python list完成最简单的DB连接池方法

关于python代码:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import pymysql
import random
import time

# 初始化mysql 连接池
def MySQLInit(mysql_host,mysql_port,mysql_user,mysql_password,mysql_charset,mysql_dbname,mysql_maxconnect):

  # 定义返回mysql连接池的类型,这里定义为 list   
  return_db_list = []

  for Connect in range(0,mysql_maxconnect):
    try:
      db = pymysql.connect(
        host = mysql_host , 
        port = mysql_port , 
        user = mysql_user , 
        passwd = mysql_password ,
        db = mysql_dbname ,
        charset = mysql_charset 
      )

      print ("连接MySQL数据库成功,MySQL数据库ID为:%s" %(db))
      return_db_list.append(db)
    except Exception as e:
      print ("连接MySQL数据库出错")
      print (e)

  # 如果mysql连接池为空,则返回-1
  if 0 == len(return_db_list):
    print ("错误 , 连接MySQL数据库失败,连接池为0")
    return -1

  else:
    # 返回mysql连接池
    return return_db_list

def Pull_DB_Connect(mysql_host,mysql_port,mysql_user,mysql_password,mysql_charset,mysql_dbname , MySQL_Connect_Pool , mysql_maxconnect) :
  
  # 打印补充前的mysql连接数
  print ("补充前MySQL连接数为:",len(MySQL_Connect_Pool))
  
  # 循环相差的连接数
  for Connect in range((len(MySQL_Connect_Pool)) , mysql_maxconnect):
    try:
      db = pymysql.connect(
        host = mysql_host , 
        port = mysql_port , 
        user = mysql_user , 
        passwd = mysql_password ,
        db = mysql_dbname ,
        charset = mysql_charset 
      )

      print ("重新补充,连接MySQL数据库成功,MySQL数据库ID为:%s" %(db))
      # 将刚刚连接成功的DB连接追加到MySQL_Connect_Pool中
      MySQL_Connect_Pool.append(db)
    except Exception as e:
      print ("重新补充,连接MySQL数据库出错")
      print (e)

  if 0 == len(MySQL_Connect_Pool):
    print ("错误 , 连接MySQL数据库失败,连接池为0")
    return -1

  else:
    # 打印连接池总数并且返回
    print("Mysql 连接池总数为:" , len(MySQL_Connect_Pool))
    return MySQL_Connect_Pool 

def main() :

  # 定义测试mysql信息
  mysql_host = "192.168.1.100"
  mysql_port = 3306
  mysql_user = "liwang" 
  mysql_password = "liwang"
  mysql_charset = "utf8"
  mysql_dbname = "itchat"
  mysql_maxconnect = 3

  # 初始化mysql连接池
  MySQL_Connect_Pool = MySQLInit(mysql_host,mysql_port,mysql_user,mysql_password,mysql_charset,mysql_dbname,mysql_maxconnect)

  # 定义初始化sql 
  sql = "show databases;"

  
  while True:
    # 随机获连接池的下标
    db_link = random.randint(0,len(MySQL_Connect_Pool)-1)
    try:
      # 执行sql 
      cursor = MySQL_Connect_Pool[db_link].cursor()
      cursor.execute(sql)
      print (cursor.fetchall())
    except Exception as e:
      # 如果执行失败,模拟为DB连接失效,则打印错误信息,删除错误的MySQL_Connect_Pool信息
      print (e)
      del MySQL_Connect_Pool[db_link]
      print ("数据库无法连接,删除Mysql连接池下标:" , db_link)
      # 重新补充mysql连接池
      Pull_DB_Connect(mysql_host,mysql_port,mysql_user,mysql_password,mysql_charset,mysql_dbname,MySQL_Connect_Pool,mysql_maxconnect)
    
    # 休眠10s 
    time.sleep(10)

if __name__ == "__main__" :
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python自动化测试之连接几组测试包实例
Sep 28 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
Python中map,reduce,filter和sorted函数的使用方法
Aug 17 Python
解决PySide+Python子线程更新UI线程的问题
Jan 11 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
python用Tkinter做自己的中文代码编辑器
Sep 07 Python
python中字典增加和删除使用方法
Sep 30 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
python使用requests.session模拟登录
Aug 09 #Python
如何在Cloud Studio上执行Python代码?
Aug 09 #Python
python切片(获取一个子列表(数组))详解
Aug 09 #Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 #Python
一行python实现树形结构的方法
Aug 09 #Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 #Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
Aug 09 #Python
You might like
php中用数组的方法设置cookies
2011/04/21 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
python奇偶行分开存储实现代码
2018/03/19 Python
Python中的函数作用域
2018/05/07 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
django 自定义过滤器的实现
2019/02/26 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
经济系大学生求职信
2013/10/01 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
小学班主任寄语大全
2014/04/04 职场文书
国庆节演讲稿
2014/05/27 职场文书
学校领导干部民主生活会整改方案
2014/09/29 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL