zoukankan      html  css  js  c++  java
  • Flask DBUtils

    作用:创建连接池,解决多线程问题

    1、安装模块

    pip3 install -i https://pypi.douban.com/simple DBUtils

    2、settings.py(配置文件)

    from DBUtils.PooledDB import PooledDB
    import pymysql
    
    
    #
    
    
    class Config:
        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='密码',
            database='DBU',
            charset='utf8'
        )

    3、在其它模块中使用 xx.py

    import pymysql
    from settings import Config
    
    con = Config.POOL.connection()
    cursor = con.cursor(cursor=pymysql.cursors.DictCursor)
    sql = "select name, line from userinfo where name=%s"
    args = 'tom'
    cursor.execute(sql, (args,))
    data = cursor.fetchall()
    print(data)
    cursor.close()
    con.close()

    优化:封装函数

    import pymysql
    from settings import Config
    
    
    def connect_database(sql, args):
        con = Config.POOL.connection()
        cursor = con.cursor(cursor=pymysql.cursors.DictCursor)
        cursor.execute(sql, (args,))
        data = cursor.fetchall()
        # print(data)
        cursor.close()
        con.close()
        return data
    
    
    sql = "select name, line from userinfo where name=%s"
    args = 'tom'
    
    
    ret = connect_database(sql, args)
    print(ret)

    终极优化

    import pymysql
    from settings import Config
    
    
    def db_connect():
        con = Config.POOL.connection()
        cursor = con.cursor(cursor=pymysql.cursors.DictCursor)
        return con, cursor
    
    
    def db_connect_close(cursor, con):
        cursor.close()
        con.close()
    
    
    def fetch_all(sql, args):
        con, cursor = db_connect()
        # con = Config.POOL.connection()
        # cursor = con.cursor(cursor=pymysql.cursors.DictCursor)
        cursor.execute(sql, (args,))
        data = cursor.fetchall()
        # print(data)
        db_connect_close(cursor, con)
        # cursor.close()
        # con.close()
        return data
    
    
    # sql = "select name, line from userinfo where name=%s"
    # args = 'tom'
    #
    #
    # ret = fetch_all(sql, args)
    # print(ret)

    调用

    from xx import fetch_all
    
    sql = "select name, line from userinfo where name=%s"
    args = 'tom'
    
    
    ret = fetch_all(sql, args)
    print(ret)
  • 相关阅读:
    程序员的学习和积累
    【STL】-迭代器的用法
    【STL】-list的用法
    【STL】-deque的用法
    【STL】- vector的用法
    数据结构-各种排序算法
    【STL】-priority_queue的用法
    数据结构-二项队列
    IT公司100题-8-智力题
    IT公司100题-7-判断两个链表是否相交
  • 原文地址:https://www.cnblogs.com/wt7018/p/11608040.html
Copyright © 2011-2022 走看看