Falsk——数据库连接池

Flask/其他:
                    - 原生SQL
                        - pymysql(2/3)
                        - MySQLdb(2)

import pymysql

dbinfo = {
    "host": "api.lemonban.com",
    "user": "future",
    "password": "123456",
    "port": 3306,
}


                cursor = CONN.cursor()
                cursor.execute('select * from tb1')
                result = cursor.fetchall()
                cursor.close()
                
                print(result)

       解决:
                - 不能为每个用户创建一个链接。
                - 创建一定数量的连接池,如果有人来。

使用 DBUtils模块:

DBUtils是Python的一个用于实现数据库连接池的模块。

        - 使用:
                    - 模式一:为每个线程创建连接。
                    - 模式二:创建n个连接,多线程来时,去获取。       

模式一

POOL = PersistentDB(
    creator=pymysql,  # 使用链接数据库的模块
    maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
    setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
    ping=0, # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed 执行query前检测 , 7 = always  一直检测   一般用4和7
    closeable=False,    一般不会改
    # 如果为False时, conn.close() 实际上被忽略,供下次使用,再线程关闭时,才会自动关闭链接。如果为True时, conn.close()则关闭链接,那么再次调用pool.connection时就会报错,因为已经真的关闭了连接(pool.steady_connection()可以获取一个新的链接)
    threadlocal=None,  # 本线程独享值得对象,用于保存链接对象,如果链接对象被重置
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='pooldb',
    charset='utf8'
)

模式二

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=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
    ping=0,
    # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='pooldb',
    charset='utf8'
)

定义操作数据里方法:

class SqlHelper(objiect):

        @staticmethod

        def  select_one(sql,*args)

        con = Poll.content()

        cursor = con.cursor()

        cursor.exeute(sql,*args)

        result = cursor.fetonel()

        con.close()

        return result      

'

        @staticmethod   

  def  select_all(sql,*args)

        con = Poll.content()

        cursor = con.cursor()

        cursor.exeute(sql,*args)

        result = cursor.fetonel()

        con.close()

        return result         

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值