利用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 yield 使用浅析
May 28 Python
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
Python如何判断数独是否合法
Sep 08 Python
python使用xslt提取网页数据的方法
Feb 23 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
PyTorch dropout设置训练和测试模式的实现
May 27 Python
python保存图片的四个常用方法
Feb 28 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开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
php连接mysql数据库
2017/03/21 PHP
javascript json 新手入门文档
2009/12/03 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
python获取本地计算机名字的方法
2015/04/29 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
Python判断两个对象相等的原理
2017/12/12 Python
Python 字典中的所有方法及用法
2020/06/10 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
《学棋》教后反思
2014/04/14 职场文书
平安工地汇报材料
2014/08/19 职场文书
就业意向书范本
2015/05/11 职场文书
运动会主持词大全
2015/07/02 职场文书
新手初学Java List 接口
2021/07/07 Java/Android
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
hive数据仓库新增字段方法
2022/06/25 数据库
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android