利用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 相关文章推荐
TensorFlow神经网络优化策略学习
Mar 09 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
python框架django项目部署相关知识详解
Nov 04 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
Python timeit模块原理及使用方法
Oct 10 Python
python 基于pygame实现俄罗斯方块
Mar 02 Python
教你使用Pandas直接核算Excel中快递费用
May 12 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实现链式操作的核心思想
2015/06/23 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
jquery实用代码片段集合
2010/08/12 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
iframe的父子窗口之间的对象相互调用基本用法
2013/09/03 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
vue-axios使用详解
2017/05/10 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
Python Tkinter GUI编程入门介绍
2015/03/10 Python
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
python日志logging模块使用方法分析
2019/05/23 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
python多线程并发及测试框架案例
2019/10/15 Python
简历中个人求职的自我评价模板
2013/11/29 职场文书
农民工创业典型事迹
2014/01/25 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
经费申请报告范文
2015/05/18 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python