利用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 相关文章推荐
Python3.2中Print函数用法实例详解
May 19 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
python高级特性和高阶函数及使用详解
Oct 17 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
python hash每次调用结果不同的原因
Nov 21 Python
什么是python类属性
Jun 10 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
Python如何使用vars返回对象的属性列表
Oct 17 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
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
2013/02/01 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
PHP实现简单日历类编写
2020/08/28 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
Python3生成手写体数字方法
2018/01/30 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
用python写PDF转换器的实现
2020/10/29 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
大学校园生活自我鉴定
2014/01/13 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
公司聚餐通知
2015/04/22 职场文书
2015年共青团工作总结
2015/05/15 职场文书
公诉意见书范文
2015/06/05 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python
Nginx HTTP跳转至HTTPS
2022/05/15 Servers