利用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实现计算倒数的方法
Jul 11 Python
Python脚本实现自动发带图的微博
Apr 27 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
python实现批量解析邮件并下载附件
Jun 19 Python
python递归函数绘制分形树的方法
Jun 22 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
numpy linalg模块的具体使用方法
May 26 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
Python基于当前时间批量创建文件
May 07 Python
python实现进度条的多种实现
Apr 29 Python
python通过函数名调用函数的几种方法总结
Jun 07 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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 操作excel文件的方法小结
2009/12/31 PHP
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
php中如何执行linux命令详解
2018/11/06 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
python解析yaml文件过程详解
2019/08/30 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
Python修改列表值问题解决方案
2020/03/06 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
Python 代码调试技巧示例代码
2020/08/11 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
金融专业个人求职信范文
2013/11/28 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
代理人委托书
2014/09/16 职场文书
优秀员工事迹材料
2014/12/20 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
python 闭包函数详细介绍
2022/04/19 Python