利用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程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
python中文乱码不着急,先看懂字节和字符
Dec 20 Python
使用tensorflow实现线性svm
Sep 07 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
python集成开发环境配置(pycharm)
Feb 14 Python
python字典和json.dumps()的遇到的坑分析
Mar 11 Python
基于Python快速处理PDF表格数据
Jun 03 Python
pandas DataFrame运算的实现
Jun 14 Python
python 破解加密zip文件的密码
Apr 22 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 身份证号验证函数
2009/05/07 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
JavaScript函数详解
2014/11/17 Javascript
javascript折半查找详解
2015/01/26 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
js禁止表单重复提交
2017/08/29 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
Python导入txt数据到mysql的方法
2015/04/08 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
python全局变量引用与修改过程解析
2020/01/07 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
2014年实验室工作总结
2014/12/03 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
2015年调度员工作总结
2015/04/30 职场文书
车辆挂靠协议书
2016/03/23 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python