首页 > 数据库 >flask数据库连接

flask数据库连接

时间:2023-04-04 16:47:03浏览次数:38  
标签:flask 数据库 DB cursor config 连接

flask数据库连接

flask连接数据库

flask连接数据库需要借助pymysql模块,相当于一个mysql的客户端连接。

那么问题来了,我们应该按照什么策略去连接数据库?

  1. 来一个请求连一次,请求处理完后断开数据库连接

    当并发量过高时,会有数据库服务端无法处理的隐患

    且每次请求都重新连接数据库一次效率会很低。

  2. 只连一次,全局使用

    不需要每次重新连接了,但是会出现新的问题,由于使用相同的连接,一个请求查询语句的数据结果可能会被其他请求取走,导致更严重的问题——数据错乱。

  3. 建立数据库连接池,每次请求从既有的连接池中取一个mysql服务去执行sql,当处理完后才释放掉此服务供给其他请求使用。而数据库池被完全占用时,其他请求需要等待。

    这样就既缓解了第一种策略的连接效率低的问题,又避免了第二种策略会出现的数据错乱问题。

dbutils建立数据库连接池

dbutils是一个第三方模块:

pip install dbutils

dbutils基本使用:

from dbutils.pooled_db import PooledDB
import pymysql


POOL = PooledDB(
    creator=pymysql,  # 数据库模块(必填)
    mincached=config.DB_MIN_CACHED,  # 最小闲置连接数
    maxcached=config.DB_MAX_CACHED,  # 最大闲置连接数
    maxshared=config.DB_MAX_SHARED,  # 最大共享连接数
    maxconnections=config.DB_MAX_CONNECYIONS,  # 允许的最大连接数(0或None不做限制)
    blocking=config.DB_BLOCKING,  # 连接达到最大时是选择阻塞(true)还是返回报错(false)
    maxusage=config.DB_MAX_USAGE,  # 单个连接最大复用数(0表示不限制)
    setsession=config.DB_SET_SESSION,  # 一个可选的SQL命令列表用于准备每个会话,如["set datestyle to german", ...]
    host=config.DB_TEST_HOST,  # 连接的ip地址
    port=config.DB_TEST_PORT,  # 连接的端口
    user=config.DB_TEST_USER,  # 连接的用户名
    passwd=config.DB_TEST_PASSWORD,  # 连接的密码
    db=config.DB_TEST_DBNAME,  # 连接的数据库名
    use_unicode=False,  
    charset=config.DB_CHARSET  # 字符编码
)

conn = POOL.connection()  # 从池子里取一个连接
cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生游标
cursor.execute('sql语句')  # 执行游标
res = cursor.fetchall()  # sql有返回值还可以拿到结果
cursor.close()
conn.close()  # 将连接归还连接池

flask使用单例配置数据库连接池:

##### db_pool.py
from dbutils.pooled_db import PooledDB

POOL = PooledDB(...)

##### 使用到sql的地方
from db_pool import POOL
...
@app.route('/query')
def query():
    conn = POOL.connection()
    cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生游标
    cursor.execute('sql语句')  # 执行游标
    res = cursor.fetchall()  # sql有返回值还可以拿到结果
    cursor.close()
    conn.close()  # 将连接归还连接池
    return jsonify(res)

标签:flask,数据库,DB,cursor,config,连接
From: https://www.cnblogs.com/Leethon-lizhilog/p/17286897.html

相关文章

  • MySQL客户端建立连接的两种类型
     MySQL客户端建立连接的两种类型 通常,默认情况下,客户端连接MySQL服务器有两种类型:使用Unix套接字文件通过文件系统中的文件进行连接(默认/tmp/mysql.sock),或者使用通过端口号连接的TCP/IP(此类通常涉及远程网络交互)。Unix套接字文件连接比TCP/IP更快,但只能在连接到同一......
  • 基于mnist手写数字数据库的深度学习网络训练和数字识别matlab仿真
    1.算法描述        MNIST数据集(MixedNationalInstituteofStandardsandTechnologydatabase)是美国国家标准与技术研究院收集整理的大型手写数字数据库,该数据集包含60000 个于训练的样本和10000 个于测试的样本,图像是固定⼤小(28x28像素),每个像素的值为......
  • web出现rs查询结果为null,但数据库里的确存在数据
       执行语句,传过来用户名与密码,可rs查询不到结果,而数据库中的确存在该条数据  按住admin发现它前面有一个空格,将空格删除可行。 发现自己书写习惯,在出现(Default)后习惯按个空格再输入,导致四个数据都前面有空格,在前端一个都没有查到。 ......
  • flask框架03 蓝图的使用 g对象 数据库连接池
    今日内容目录今日内容1蓝图的使用2g对象3数据库连接池1蓝图的使用#blueprint翻译过来的,称之为蓝图#作用是:之前全在一个py中写flask项目,后期肯定要划分目录#不用蓝图,划分目录 no_blueprint_flask#项目名src#核心源码位置__i......
  • flask3
    1蓝图的使用#blueprint翻译过来称之为蓝图#作用是:之前全在一个py中写flask项目,后期肯定要划分目录#不用蓝图,划分目录 no_blueprint_flask#项目名src#核心源码位置__init__.py#包里面实例化得到了app对象,models.......
  • flask项目结构参考与g对象
    flask项目结构参考与g对象flask本身是一个轻量化的框架,如果选择flask做项目,大部分时候,可能并不是打算运行特别庞大的项目,因此flask项目的结构并没有特别统一的规范,这篇文章仅作参考。flask蓝图蓝图——blueprint蓝图的基本使用fromflaskimportFlask,Blueprintapp=Fla......
  • Microsoft Remote Desktop(微软远程连接软件)v10.8.1中文正式版
    MicrosoftRemoteDesktopmac版是Macos上一款微软远程连接软件,RemoteDesktop下载可以通过Mac电脑进行远程管理Windows平台的程序访问与文件管理等操作,十分好用。在MicrosoftRemoteDesktop客户端中使用RemoteFX体验Windows的强大功能,旨在帮助您在任何地方完成工作。Macw提供mic......
  • Redis数据库容灾备份企业实战及故障恢复【转】
    本章目录0x00数据持久化1.RDB方式2.AOF方式如何抉择RDBORAOF?0x01备份容灾 一、备份1.手动备份redis数据库2.迁移Redis指定db-数据库3.Redis集群数据备份与迁移二、恢复1.系统Redis用户被删除后配置数据恢复流程2.Kubernetes中单实例异常数据迁移恢复实践......
  • 免费基站定位数据库下载
    免费基站定位数据库下载推荐一个免费的基站定位数据库:OpenCellID。OpenCellID是一个开源项目,目标就是收集并公开全球的基站位置数据。和大多数同类项目一样,OpenCellID也是通过众包(crowdsource)来采集数据的,它依靠的是自家另一个开源地图项目OpenStreetMap,使用这个App的用户会......
  • 1 蓝图的使用 、2 g对象 、3 数据库连接池
    目录1蓝图的使用2g对象3数据库连接池1蓝图的使用#blueprint翻译过来的,称之为蓝图#作用是:之前全在一个py中写flask项目,后期肯定要划分目录#不用蓝图,划分目录 no_blueprint_flask#项目名src#核心源码位置__init__.py#包里......