python数据库连接池工具类,Python连接池

  python数据库连接池工具类,Python连接池

  

  Python 数据库连接池

  Pymysql在python编程中可以用于数据库的连接、添加、删除和查询操作,但是每次连接mysql都要独立请求访问,浪费资源,而且当访问次数达到一定数量时,会对mysql的性能产生很大的影响。因此,在实际使用中,通常采用数据库的连接池技术来访问数据库,实现资源重用。

  Python的数据库连接池包:DBUtils

  DBUtils提供了两个外部接口:

  PersistentDB:提供特定于线程的数据库连接,并自动管理连接。

  PooledDB:在线程之间提供可共享的数据库连接,并自动管理连接。

  DBUtils的包安装:pip3安装DBUtils或下载DBUtils安装包。解压缩后,使用python setup.py install命令进行安装。

  未使用连接池的数据库方法:

  defgetconn(主机,用户,密码,数据库,sql,端口=3306,字符集=utf8):

  Conn=pymysql.connect (host=host,user=user,passwd=passwd,port=port,db=db,charset=charset) #建立连接

  cursor=conn . cursor(cursor=pymysql . cursors . dict cursor)#创建一个游标并指定游标类型。

  执行(sql)#执行sql

  if sql . starts with( select ): #确定SQL是否是select

  res=cur.fetchone()

  else:

  执行conn.commit()# insert \ delete \ update语句后需要提交。

  res=88

  Cur.close()#关闭光标

  Conn.close()#关闭连接

  returnres用数据库连接池后的方法:

  g>

  

importMySQLdb

  fromDBUtils.PooledDBimportPooledDB

  pool=PooledDB(MySQLdb,5,host='localhost',user='root',passwd='pwd',db='myDB',port=3306)#5为连接池里的最少连接数

  

  conn=pool.connection()#以后每次需要数据库连接就是用connection()函数获取连接就好了

  cur=conn.cursor()

  SQL="select*fromtable1"

  r=cur.execute(SQL)

  r=cur.fetchall()

  cur.close()

  conn.close()

相关推荐:《Python视频教程》

  下面利用pymysql 和 DBUtils 建立自己的mysql数据库连接工具包。

  

classOPMysql(object):

  __pool=None

  def__init__(self):

  #构造函数,创建数据库连接、游标

  self.coon=OPMysql.getmysqlconn()

  self.cur=self.coon.cursor(cursor=pymysql.cursors.DictCursor)

  #数据库连接池连接

  @staticmethod

  defgetmysqlconn():

  ifOPMysql.__poolisNone:

  __pool=PooledDB(creator=pymysql,mincached=1,maxcached=20,host=mysqlInfo['host'],user=mysqlInfo['user'],passwd=mysqlInfo['passwd'],db=mysqlInfo['db'],port=mysqlInfo['port'],charset=mysqlInfo['charset'])

  print(__pool)

  return__pool.connection()

  #插入\更新\删除sql

  defop_insert(self,sql):

  print('op_insert',sql)

  insert_num=self.cur.execute(sql)

  print('mysqlsucess',insert_num)

  self.coon.commit()

  returninsert_num

  #查询

  defop_select(self,sql):

  print('op_select',sql)

  self.cur.execute(sql)#执行sql

  select_res=self.cur.fetchone()#返回结果为字典

  print('op_select',select_res)

  returnselect_res

  #释放资源

  defdispose(self):

  self.coon.close()

  self.cur.close()

配置文件mysqlinfo,包含数据库的连接信息、用户名密码等:

  

mysqlInfo={

  "host":'192.168.1.112',

  "user":'root',

  "passwd":'123456',

  "db":'apitest',

  "port":3306,

  "charset":'utf8'

  }

创建test,测试数据库连接

  

if__name__=='__main__':

  #申请资源

  opm=OPMysql()

  sql="select*fromdemowherename='a'andpwd='e10adc3949ba59abbe56e057f20f883e'"

  res=opm.op_select(sql)

  #释放资源

  opm.dispose()

PooledDB参数解释:

  mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接。

  maxcached,空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接。

  maxconnections,连接数,进程中可创建的线程数。

  blocking, 当连接数达到连接数时,再次请求时,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于连接数;如果这个值为False,会报错。

  masxshared,当连接数达到这个数时,新请求的连接会分享已经分配出去的连接。

  在uwsgi中,每个http请求都会有一个进程,连接池中配置的连接数都是一个进程为单位的(即上面的连接数,都是在一个进程中创建的线程数),如果业务中,一个http请求中需要的sql连接数不是很多的话(其实大多数都只需要创建一个连接),配置的连接数配置都不需要太大。

  连接池对性能的提升:

  在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度。

  关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁的打开和关闭连接。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些
  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些,关系型数据库与非关系型数据库简介
  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 什么是分库分表,为什么要进行分库分表-,分库分表的区别,数据库分库分表是什么,什么情况下需要用分库分表
  • vb中adodb连接数据库,
  • treeview控件绑定数据,wpf treeview数据绑定,详解TreeView绑定数据库
  • sql的多表查询,数据库如何实现多表查询
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库,SQLServer2019 数据库的基本使用之图形化界面操作的实现
  • sql数据库定时备份怎么弄,mysql 定期备份
  • sql数据库定时备份怎么弄,mysql 定期备份,MySQL 数据库定时备份的几种方式(全面)
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar,SQL中varchar和nvarchar的基本介绍及其区别
  • 留言与评论(共有 条评论)
       
    验证码: