python数据库连接池,flask怎么连接数据库

  python数据库连接池,flask怎么连接数据库

  

  数据库连接池

  DBUtils是用于数据库连接池的Python模块。

  安装

  在官网下载https://pypi.org/project/DBUtils/1.2/,然后安装:

  连接池有两种方式

  (1)模式1

  为每个线程创建一个连接。即使线程调用了close方法,也不会关闭,只是把连接放回连接池中,供自己的线程再次使用。当线程终止时,连接会自动关闭。

  POOL=PersistentDB(

  Creator=pymysql,#使用链接数据库的模块

  Maxusage=None,#链接可以重用的最大次数,以及None表示法。

  Setsession=[],#启动会话前执行的命令列表。如:[SetDateStyleto . ,设置时区.]

  ping=0,

  #pingMySQL server以检查服务是否可用。#例如:0=无=从不,1=默认=请求时,2=创建时,4=执行时,7=总是

  可关闭=假,

  #如果为False,则conn.close()实际上在下次使用时会被忽略,然后在线程关闭时链接会自动关闭。如果为真,则conn.close()关闭链接,然后再次调用pool.connection时会报错,因为连接已经真正关闭了(pool.steady_connection()可以获取新的链接)

  Threadlocal=None,#这个线程有独占值对象,用来保存链接的对象。如果链接对象被重置,

  host=127.0.0.1 ,

  端口=3306,

  user=root ,

  密码=123 ,

  database=pooldb ,

  charset=utf8

  )

  deffunc():

  conn=pool . connection(shareable=False)

  cursor=conn.cursor()

  cursor . execute( select * from B1 )

  result=cursor.fetchall()

  cursor.close()

  conn.close()

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

  (2)模式二,推荐方式。

  创建多个连接,当多个线程到来时,获取它们,

  进口时间

  importpymysql

  importthreading

  fromDBUtils.PooledDBimportPooledDB,SharedDBConnection

  POOL=PooledDB(

  creator=pymysql,#使用链接数据库的模块

  maxconnections=6,#连接池允许的连接数,0和None表示不限制连接数

  mincached=2,#初始化时,链接池中至少创建的空闲的链接,0表示不创建

  maxcached=5,#链接池中最多闲置的链接,0和None不限制

  maxshared=3,#链接池中最多共享的链接数量,0和None表示全部共享。PS:无用,因为pymysql和MySQLdb等模块的threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。

  blocking=True,#连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错

  maxusage=None,#一个链接最多被重复使用的次数,None表示制

  setsession=[],#开始会话前执行的命令列表。如:["setdatestyleto...","settimezone..."]

  ping=0,

  #pingMySQL服务端,检查是否服务可用。#如:0=None=never,1=default=wheneveritisrequested,2=whenacursoriscreated,4=whenaqueryisexecuted,7=always

  host='127.0.0.1',

  port=3306,

  user='root',

  password='123',

  database='pooldb',

  charset='utf8'

  )

  deffunc():

  #检测当前正在运行连接数的是否小于链接数,如果不小于则:等待或报raiseTooManyConnections异常

  #否则

  #则优先去初始化时创建的链接中获取链接SteadyDBConnection。

  #然后将SteadyDBConnection对象封装到PooledDedicatedDBConnection中并返回。

  #如果最开始创建的链接没有链接,则去创建一个SteadyDBConnection对象,再封装到PooledDedicatedDBConnection中并返回。

  #一旦关闭链接后,连接就返回到连接池让后续线程继续使用。

  conn=POOL.connection()

  #print(th,'链接被拿走了',conn1._con)

  #print(th,'池子里目前有',pool._idle_cache,'\r\n')

  cursor=conn.cursor()

  cursor.execute('select*fromtb1')

  result=cursor.fetchall()

  conn.close()

  func()如果没有连接池,使用pymysql来连接数据库时,单线程应用完全没有问题,但如果涉及到多线程应用那么就需要加锁,一旦加锁那么连接势必就会排队等待,当请求比较多时,性能就会降低了。

  

importpymysql

  importthreading

  fromthreadingimportRLock

  LOCK=RLock()

  CONN=pymysql.connect(host='127.0.0.1',

  port=3306,

  user='root',

  password='123',

  database='pooldb',

  charset='utf8')

  deftask(arg):

  withLOCK:

  cursor=CONN.cursor()

  cursor.execute('select*fromtb1')

  result=cursor.fetchall()

  cursor.close()

  print(result)

  foriinrange(10):

  t=threading.Thread(target=task,args=(i,))

  t.start()


郑重声明:本文由网友发布,不代表盛行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的基本介绍及其区别
  • 留言与评论(共有 条评论)
       
    验证码: