利用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学习之asyncore模块用法实例教程
Sep 29 Python
python中pygame模块用法实例
Oct 09 Python
python利用正则表达式提取字符串
Dec 08 Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
python3大文件解压和基本操作
Dec 15 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
python 通过字符串调用对象属性或方法的实例讲解
Apr 21 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
Python jieba库用法及实例解析
Nov 04 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 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 EOT定界符的使用详解
2008/09/30 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
工作需要写的一个js拖拽组件
2011/07/28 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
python安装scipy的方法步骤
2019/06/26 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
pandas分组聚合详解
2020/04/10 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
护理自我鉴定范文
2013/10/06 职场文书
工商技校毕业生自荐信
2013/11/15 职场文书
专科文秘应届生求职信
2013/11/18 职场文书
安全生产检讨书
2014/01/21 职场文书
庆元旦活动总结
2014/07/09 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
红白喜事主持词
2015/07/06 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书
Vue h函数的使用详解
2022/02/18 Vue.js
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS