利用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下使用状态机的教程
Apr 11 Python
python 远程统计文件代码分享
May 14 Python
Python操作列表之List.insert()方法的使用
May 20 Python
python自带的http模块详解
Nov 06 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
解决python 输出是省略号的问题
Apr 19 Python
Python3编码问题 Unicode utf-8 bytes互转方法
Oct 26 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
Jul 03 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
使用Keras构造简单的CNN网络实例
Jun 29 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
python实现剪贴板的操作
Jul 01 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判断浏览器的类型和语言的函数代码
2013/02/28 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
python cumsum函数的具体使用
2019/07/29 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
新手学python应该下哪个版本
2020/06/11 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
如何提高MySql的安全性
2014/06/19 面试题
我的大学生活职业生涯规划
2014/01/02 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
职业女性的职业规划
2014/03/04 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
初一军训感言
2015/08/01 职场文书
小学英语听课心得体会
2016/01/14 职场文书
教师外出学习心得体会
2016/01/18 职场文书
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript