利用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 相关文章推荐
一个基于flask的web应用诞生 flask和mysql相连(4)
Apr 11 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
python画微信表情符的实例代码
Oct 09 Python
python3中的eval和exec的区别与联系
Oct 10 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
python如何判断IP地址合法性
Apr 05 Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 Python
使用gunicorn部署django项目的问题
Dec 30 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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学习笔记之二 php入门知识
2011/01/12 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python重要函数eval多种用法解析
2020/01/14 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
高分子材料个人求职信范文
2013/09/25 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
2015年教学工作总结
2015/04/02 职场文书
实习证明模板
2015/06/16 职场文书
入队仪式主持词
2015/07/04 职场文书
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS