利用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和shell变量互相传递的几种方法
Nov 20 Python
pyramid配置session的方法教程
Nov 27 Python
图文详解WinPE下安装Python
May 17 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
python利用MethodType绑定方法到类示例代码
Aug 27 Python
实例讲解Python爬取网页数据
Jul 08 Python
python 反向输出字符串的方法
Jul 16 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
Nov 30 Python
python中的测试框架
Nov 13 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
js post方式传递提交的实现代码
2010/05/31 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
基于vue.js的分页插件详解
2017/11/27 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
Python脚本实现自动发带图的微博
2016/04/27 Python
Python 含参构造函数实例详解
2017/05/25 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
TensorFlow实现创建分类器
2018/02/06 Python
Python异常处理操作实例详解
2018/08/28 Python
Python requests设置代理的方法步骤
2020/02/23 Python
python生成任意频率正弦波方式
2020/02/25 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
python语言中有算法吗
2020/06/16 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
Android面试题附答案
2014/12/08 面试题
会计主管岗位职责范文
2013/11/08 职场文书
学生宿舍管理制度
2014/01/30 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
借名购房协议书范本
2014/10/06 职场文书
2014年公务员工作总结
2014/11/18 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记