• Flask连接数据库


    Flask连接数据库

    创建数据库连接池

    安装dbutilspymysql

    pip install dbutils
    pip install pymysql
    

    创建连接池

    from dbutils.pooled_db import PooledDB
    import pymysql
    
    pool = PooledDB(
        creator=pymysql,  # 使用连接数据库的模块
        maxconnections=5,  # 限制最大连接数
        mincached=5,  # 初始化时,连接池中至少创建的空闲连接,0表示不创建
        maxcached=5,  # 最多限制连接
        maxshared=3,  # 连接池中最大共享连接数量,0和None表示全部共享
        blocking=True,  # 池中没有可用连接后是否阻塞等待
        maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
        setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
        ping=0,     # ping MySQL服务器检查服务是否可用
        host='127.0.0.1',
        port=3306,
        user='root',
        passwd='7777',
        db='flaskdemo',
        charset='utf8',
    )
    

    在视图函数中使用

    import pymysql
    from flask import Flask
    from pool import pool
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def index():
        conn = pool.connection()
        cursor = conn.cursor(pymysql.cursors.DictCursor)
        insert_sql = 'insert into users(name,age) values(%s,%s)'
        cursor.execute(insert_sql, ('张三', 18))
        conn.commit()
        return 'ok'
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    不使用连接池

    @app.route('/')
    def index():
        conn = pymysql.connect(
            user='root',
            password="7777",
            host='127.0.0.1',
            database='flaskdemo',
            port=3306,
            autocommit=False)
        cursor = conn.cursor(pymysql.cursors.DictCursor)
        sql = 'select * from users where id >%s'
        cursor.execute(sql, 1)
        time.sleep(1)
        res = cursor.fetchall()
        print(res)
        conn.close()
        return jsonify(res)
    
    if __name__ == '__main__':
        app.run()
    

    image-20240614162829643

    使用池和不使用池的区别

    连接数越少,连接池的性能收益越低,甚至远低于不使用池

    但是连接池可以复用,且方便管理,因此还是推荐使用连接池来管理数据

  • 相关阅读:
    awk5个使用场景
    C语言练习之求第n个斐波那契数
    使用Mongoose populate实现多表关联存储与查询,内附完整代码
    少年,你可听说过MVCC?
    RabbitMQ基础组件笔记
    kubernetes负载均衡---MetalLB
    vue3热更新后导致组件执行两次的bug
    【虚拟现实】一、AR与VR的基本原理
    Linux常用命令(精简版)
    mybatis缓存知多少
  • 原文地址:https://blog.csdn.net/AZURE060606/article/details/139685143