首页 > 数据库 >1 蓝图的使用 、2 g对象 、3 数据库连接池

1 蓝图的使用 、2 g对象 、3 数据库连接池

时间:2023-04-04 15:22:33浏览次数:36  
标签:__ 蓝图 name 数据库 py cursor app 连接池

目录

1 蓝图的使用

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

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

        
        
# 蓝图的使用步骤
	-第一步:导入蓝图类           			    from flask import Blueprint
    -第二步:实例化得到蓝图对象    				  us=Blueprint('user',__name__)
    -第三步:在app中注册蓝图      				app.register_blueprint(us)
    -第四步:在不同的views.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,像django一样
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								# 启动文件

2 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()

3 数据库连接池

# flask 操作mysql
	-使用pymysql
    -在视图函数中,创建pymysql的连接,查数据,查完,返回给前端
    	-有什么问题? 来一个请求,创建一个连接,请求结束,连接关闭  (djanog就是这么做的)
        
    -把连接对象,做成全局的,在视图函数中,使用全局的连接,查询,返回给前端
    	-有什么问题?会出现数据错乱,详见下图
        
# 解决上面的两个问题
	-数据库连接池
    -创建一个全局的池
    -每次进入视图函数,从池中取一个连接使用,使用完放回到池中,只要控制池的大小,就能控制mysql连接数
    
    
    
# 使用第三方数据库连接池,使用步骤
	-1 安装 pip install dbutils
    -2 使用:实例化得到一个池对象
      
	-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%'

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

相关文章

  • 蓝图,g对象,数据库链接池
    flask蓝图使用blueprint翻译后称之为蓝图。作用是:用来划分目录​ 之前写项目的时候全在一个py文件内写flask项目。需要使用蓝图来划分目录。小型项目与大型目录都可以蓝图使用1导入蓝图类业务视图里fromflaskimportBlueprint2实例化得到蓝图对象业务视图里u......
  • oracle数据库按用户备份恢复,使用 expdp、impdp
    1,在数据库本机执行su-oracle切换oracle用户sqlplys/assysdba使用超级用户登select*fromdba_directories;查看管理员目录,一般会存在几个。2,导出命令,expdpuser/passwd@orclschemas=userdumpfile=expdp.dmpdirectory=DATA_PUMP_DIRlogfile=expdp.log##......
  • 初始数据库
    目录数据库一、数据库管理软件的由来1、程序所有的组件就不可能运行在一台机器上2、数据安全问题3、并发4、总结二、数据库概述1、什么是数据库(Database,简称DB)2.数据库的演变史3.数据存储的发展史4.数据库的本质5.数据库的分类5.SQL与NoSQLMySQL简介一、MySQL介绍二、下载安装1.安......
  • 高并发系统设计——数据库技术选型
    摘要我们用池化技术解决了数据库连接复用的问题,这时,你的垂直电商系统虽然整体架构上没有变化,但是和数据库交互的过程有了变化,在你的Web工程和数据库之间增加了数据库连接池,减少了频繁创建连接的成本,从上节课的测试来看性能上可以提升80%。现在的架构图如下所示:此时,你的数据库还......
  • Windows批处理文件初始化数据库
    前提是MySQL服务必须启动,Windows添加了MySQL的环境变量。批处理文件:@ECHOOFFSETdbhost=127.0.0.1SETdbuser=rootSETdbpasswd=rootSETdbName=xc_ntpclientmonitorSETsqlfile=C:\\ProgramFiles\\NTSM\\20210401_xc_ntpclientmonitor.sql::执行SQL脚本初始化数据......
  • 安装MYSQL_5.0/8.0教程(附数据库和客户端工具下载链接)
    1.Mysql5.7下载网盘下载(推荐):链接:https://pan.quark.cn/s/d98d2536f847提取码:kbyN 官网下载:mysql下载地址:https://dev.mysql.com/downloads/windows/installer/8.0.html跳转到上述页面,选择Archives(历史存档)选择版本-下载2.Mysql安装双击打开下载好的文件。以前安......
  • 高效简单的.Net数据库“访问+操作”技术
    高效简单的.Net数据库“访问+操作”技术 本文技术源自外企,并已在多个世界500强大型项目开发中运用。本文适合有初步C#、Linq、Sql知识的同学阅读。 相关技术在IDataAccess接口中提供。IDataAccess所在的命名空间是:DeveloperSharp.Framework.QueryEngine。(需事先从nuget......
  • Oracle数据库中的字节序格式是什么?
    前言:本文是对这篇博客WhatistheendianformatinOracledatabases?[1]的翻译,如有翻译不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处。谢谢! 英文地址:https://dbtut.com/index.php/2019/06/27/what-is-the-endian-format-in-oracle-databases/什么是字节......
  • 数据库系列:覆盖索引和规避回表
    1介绍在MySQL数据库查询过程中,索引覆盖和避免不必要的回表,是减少检索步骤,提高执行效率的有效手段。下面从这两个角度分析如何进行MySQL检索提效。2数据准备模拟一个500w数据容量的部门表emp,表结构如下,并通过工具模拟500w的数据:CREATETABLE`emp`(`id`intunsignedNO......
  • 关系数据库同步框架 Dotmim.Sync
    推荐一款在线+离线数据同步框架Dotmim.Sync 移动智能应用可以分为在线模式、纯离线模式与“在线+离线”混合模式。在线模式下系统数据一般存储在服务器端的大中型数据库(如SQLServer、Oracle、MySQL等),移动应用依赖于稳定可靠的网络连接;纯离线模式下系统数据一般存储在移......