首页 > 其他分享 >蓝图与数据连接池

蓝图与数据连接池

时间:2023-04-04 16:57:54浏览次数:29  
标签:__ 蓝图 name app py cursor 数据 连接池

蓝图的使用

# blueprint 翻译过来的,称之为蓝图
# 作用是:之前全在一个py文件中写flask,后期肯定要划分目录

不用蓝图划分目录
	no_blueprint_flask  # 项目名
        src             #核心源码位置
            __init__.py # 包 里面实例化得到了app对象,
            models.py   #放表模型
            views.py    # 放视图函数
        static          # 放静态资源
        templates       # 放模板
        	home.html   # 模板
        manage.py       # 启动文件

蓝图的使用步骤

-第一步:导入蓝图类			from flask import Blurprint
-第二部:实例化得到蓝图对象   us=Blueprint('user',__name__)
-第三部:在app中注册蓝图		app.register_blueprint(us)
-第四步:在不同view.py 使用蓝图注册路由	@us.route('/login')
-补充:蓝图可以有自己的静态文件和模板
-补充:注册蓝图时,可以使用前缀,必须以/开头

使用蓝图,划分小型项目目录

little_blueprint              # 项目名
        -src                      # 核心代码
            -static               # 静态文件
                -1.jpg            # 图片
            -templates            # 模板文件
            	-user.html            # 模板
            -views                # 视图函数存放位置
                -order.py         # 订单相关视图
                -user.py          # 用户相关视图
            -__init__.py          # 包
            -models.py            # 表模型
        -manage.py                # 启动文件

使用蓝图,划分大型项目目录,所个app

big_blueprint  								# 项目名
    -src									# 核心文件
        -admin								# admin的app
        	-static							# 静态文件
        		-1.jpg						# 图片
        	-templates						# 模板文件目录
        		-admin_home.html			# 模板文件
        	-__init__.py					# 包
        	-models.py						# 表模型
        	-views.py						# 视图函数
        -home								# home app
        -order								# orderapp
        -__init__.py						# 包
        -settings.py						# 配置文件
    -manage.py								# 启动文件

g对象

g对象是什么?
	-global的缩写,在python中是个关键字,不能以关键字作为变量名,干脆用了g
   -g对象,在整个请求的全局,可以放值,可以取值
   -全局变量,在任意位置导入使用即可
    
  -它为什么不学django使用request作为上下文?
		-因为使用request,可能会造成request数据的污染,不小写改了request的属性,但你不知道
       -建议使用g 是空的,放入之后在当次请求中全局优先
    
以后想在当次请求中,放入一些数据,后面使用,就可以使用g对象

g和session有什么区别?
	-g 只针对与当次请求
 	-session针对于多次请求
from flask import Flask, g, request

app = Flask(__name__)
app.debug = True


@app.before_request
def before():
    if 'home' in request.path:
        g.xx = 'xx'


def add(a, b):
    # print('---',g.name)
    print('---', request.name)
    return a + b


@app.route('/')
def index():
    print(g.xx)
    name = request.args.get('name')
    # g.name = name
    request.method = name
    res = add(1, 2)
    print(res)
    return 'index'


@app.route('/home')
def home():
    print(g.xx)
    return 'index'


if __name__ == '__main__':
    app.run()

数据库连接池

flask操作mysql
	-使用pymysql
	-在视图函数中,创建pymysql的连接,查数据,查完,返回给前端
   	-有什么问题?来一个请求,创建一个连接,请求结束,连接关闭(django就是这么做)
    
    -把链接对象,做成全局的,在视图函数中,使用全局的连接,查询,返回给前端
    	-有什么问题?会出现数据错乱
 
# 解决上面的两个问题
	-数据库连接池
 	-创建一个全局的池
   -每次进入视图函数,从池中取一个连接使用,使用完放回到池中,值要控制池的大小,就能控制mysql连接数

# 使用第三方数据库连接池,使用步骤
1.安装pip install dbutils
2.实例化得到一个池对象
    pool = PooledDB(
        creator=pymysql,  # 使用链接数据库的模块
        maxconnections=10,  # 连接池允许的最大连接数,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='cnblogs',
        charset='utf8'
    )
3.在视图函数中导入使用
    conn = pool.connection()
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    cursor.execute('select id,title,author_img from aritcle limit 2')
    res = cursor.fetchall()

# 带池的代码
@app.route('/article_pool')
def article_pool():
    conn = pool.connection()
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    cursor.execute('select id,title,author_img from aritcle limit 2')
    res = cursor.fetchall()
    print(res)
    return jsonify(res)

# 不带池的代码
@app.route('/article')
def article():
    conn = pymysql.connect(user='root',
                           password="",
                           host='127.0.0.1',
                           database='cnblogs',
                           port=3306)
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    time.sleep(random.randint(1,3))
    cursor.execute('select id,title,author_img from aritcle limit 2')
    res = cursor.fetchall()
    cursor.close()
    conn.close()
    return jsonify(res)

# 压力测试代码
from threading import Thread
import requests


def task():
    res = requests.get('http://127.0.0.1:5000/article_pool')
    print(len(res.text))


if __name__ == '__main__':
    for i in range(500):
        t = Thread(target=task)
        t.start()
## 效果是:
	使用池的连接数明显小
    不使用池连接数明显很大
    
    
# 查看数据库连接数
show status like 'Threads%'

image

标签:__,蓝图,name,app,py,cursor,数据,连接池
From: https://www.cnblogs.com/zhanghong1229/p/17286953.html

相关文章

  • flask数据库连接
    flask数据库连接flask连接数据库flask连接数据库需要借助pymysql模块,相当于一个mysql的客户端连接。那么问题来了,我们应该按照什么策略去连接数据库?来一个请求连一次,请求处理完后断开数据库连接当并发量过高时,会有数据库服务端无法处理的隐患且每次请求都重新连接数据库一......
  • DataLeap 数据资产实战:如何实现存储优化?
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群背景DataLeap作为一站式数据中台套件,汇集了字节内部多年积累的数据集成、开发、运维、治理、资产、安全等全套数据中台建设的经验,助力企业客户提升数据研发治理效率、降低管理成本。Da......
  • 第十二章 电商产品评论数据情感分析
    评论去重、数据清洗#-*-coding:utf-8-*-#代码12-1评论去重的代码importpandasaspdimportreimportjieba.possegaspsgimportnumpyasnp#去重,去除完全重复的数据reviews=pd.read_csv("E:\\anaconda3\\jupyterFile\\数据分析\\data\\data\\reviews.csv......
  • 电商产品评论数据情感分析
    importpandasaspdimportreimportjieba.possegaspsgimportnumpyasnp#去重,去除完全重复的数据reviews=pd.read_csv("reviews.csv")reviews=reviews[['content','content_type']].drop_duplicates()content=reviews['content']......
  • 基于mnist手写数字数据库的深度学习网络训练和数字识别matlab仿真
    1.算法描述        MNIST数据集(MixedNationalInstituteofStandardsandTechnologydatabase)是美国国家标准与技术研究院收集整理的大型手写数字数据库,该数据集包含60000 个于训练的样本和10000 个于测试的样本,图像是固定⼤小(28x28像素),每个像素的值为......
  • web出现rs查询结果为null,但数据库里的确存在数据
       执行语句,传过来用户名与密码,可rs查询不到结果,而数据库中的确存在该条数据  按住admin发现它前面有一个空格,将空格删除可行。 发现自己书写习惯,在出现(Default)后习惯按个空格再输入,导致四个数据都前面有空格,在前端一个都没有查到。 ......
  • 存储引擎和数据类型
    目录配置文件存储引擎(面试用)mysql的基本数据类型1.整形2.浮点型3.字符串4.日期类型5.枚举与集合整型中括号内数字的作用(面试用)创建表的完整语法配置文件#1.复制my-default.ini文件#2.命名为my.ini#3.修改完配置文件只会,一定别忘重启服务端存储引擎(面试用)#理论部分......
  • 电商产品评论数据情感分析
    针对用户在电商平台上留下的评论数据,对其进行分词、词性标注和去除停用词等文本预处理。基于预处理后的数据进行情感分析,并使用LDA主题模型提取评论关键信息,以了解用户的需求、意见、购买原因及产品的优缺点等,最终提出改善产品的建议。数据预处理评论去重避免一些客户长时间不......
  • flask框架03 蓝图的使用 g对象 数据库连接池
    今日内容目录今日内容1蓝图的使用2g对象3数据库连接池1蓝图的使用#blueprint翻译过来的,称之为蓝图#作用是:之前全在一个py中写flask项目,后期肯定要划分目录#不用蓝图,划分目录 no_blueprint_flask#项目名src#核心源码位置__i......
  • Redis数据库容灾备份企业实战及故障恢复【转】
    本章目录0x00数据持久化1.RDB方式2.AOF方式如何抉择RDBORAOF?0x01备份容灾 一、备份1.手动备份redis数据库2.迁移Redis指定db-数据库3.Redis集群数据备份与迁移二、恢复1.系统Redis用户被删除后配置数据恢复流程2.Kubernetes中单实例异常数据迁移恢复实践......