利用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中的wxPython实现最基本的浏览器功能
Apr 14 Python
python中list列表的高级函数
May 17 Python
python常用知识梳理(必看篇)
Mar 23 Python
python用户评论标签匹配的解决方法
May 31 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
python创建与遍历List二维列表的方法
Aug 16 Python
Python实现中值滤波去噪方式
Dec 18 Python
python日期与时间戳的各种转换示例
Feb 12 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
Python中常见的导入方式总结
May 06 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
May 25 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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创建单例后台进程的方法示例
2017/05/23 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
关于IFRAME 自适应高度的研究
2006/07/20 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
jQuery下的几个你可能没用过的功能
2010/08/29 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
javascript操作数组详解
2014/12/17 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
JavaScript包装对象使用详解
2015/07/09 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
python避免死锁方法实例分析
2015/06/04 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
巾帼志愿者活动方案
2014/08/17 职场文书
初中优秀学生评语
2014/12/29 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
Win11查看设备管理器
2022/04/19 数码科技