利用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 Web开发模板引擎优缺点总结
May 06 Python
对于Python异常处理慎用“except:pass”建议
Apr 02 Python
python获取目录下所有文件的方法
Jun 01 Python
python访问抓取网页常用命令总结
Apr 11 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
利用Pytorch实现简单的线性回归算法
Jan 15 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 Python
如何利用pygame实现打飞机小游戏
May 30 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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模版引擎中的缓存应用
2009/12/02 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
Yii2如何批量添加数据
2016/05/17 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
jquery动态添加option示例
2013/12/30 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
介绍Python中内置的itertools模块
2015/04/29 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
Python使用re模块验证危险字符
2020/05/21 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
工厂保洁员岗位职责
2013/12/04 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
效能风暴心得体会
2014/09/04 职场文书
2015年元旦标语大全
2014/12/09 职场文书
幼师个人总结范文
2015/02/28 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
Python实现自动玩连连看的脚本分享
2022/04/04 Python
数据设计之权限的实现
2022/08/05 MySQL