利用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使用点操作符访问字典(dict)数据的方法
Mar 16 Python
Python CSV模块使用实例
Apr 09 Python
简单介绍Python中的round()方法
May 15 Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 Python
Python计时相关操作详解【time,datetime】
May 26 Python
Python实现的txt文件去重功能示例
Jul 07 Python
python 实现数字字符串左侧补零的方法
Dec 04 Python
pytorch permute维度转换方法
Dec 14 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 Python
提取视频中的音频 Python只需要三行代码!
May 10 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模板引擎SMARTY
2006/10/09 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
12步教你理解Python装饰器
2016/02/25 Python
OpenCV 边缘检测
2019/07/10 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
Pytorch的mean和std调查实例
2020/01/02 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
IE9下html5初试小刀
2010/09/21 HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
禁烟标语大全
2014/06/11 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
领导欢迎词范文
2015/01/26 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android