利用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字典数据对象拆分的简单实现方法
Dec 05 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 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中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
Python中的ConfigParser模块使用详解
2015/05/04 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
幼儿园儿童节主持词
2014/03/21 职场文书
星级党支部申报材料
2014/05/31 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers