项目中记录影响性能的缓慢数据库查询
app.config['FLASKY_DB_QUERY_TIMEOUT']=0.00000000001
2.在每次api请求结束后,判断每条查询语句执行时间是否低于设定的值,如果低于,则记录下查询语句相关信息。
@app.after_request def after_request(response):#录影响性能的缓慢数据库查询for query in get_debug_queries():if query.duration >= app.config['FLASKY_DB_QUERY_TIMEOUT']:print '#####Slow query:%s \nParameters:%s \nDuration:%fs\nContext:%s\n #####'% \(query.statement, query.parameters, query.duration,query.context)return response
其中 (query.statement, query.parameters, query.duration,query.context) 属性含义如图:
全部代码如下:
#coding:utf8 from flask import Flask, jsonify import timefrom flask_sqlalchemy import SQLAlchemy, get_debug_queriesdb = SQLAlchemy() app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:password@127.0.0.1:3306/database_name?charset=utf8' app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True app.config['SECRET_KEY']='rgc is a good boy!hehe!' # 启用缓慢查询记录功能 # app.config['SQLALCHEMY_RECORD_QUERIES']=True app.config['FLASKY_DB_QUERY_TIMEOUT']=0.00000000001 db.init_app(app)class User(db.Model):__tablename__ = 'user'id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)email = db.Column('email', db.String(64), unique=True) # 邮箱def __init__(self, email):self.email = emaildef to_dict(self):output_dict = {}output_dict.update(self.__dict__)if "_sa_instance_state" in output_dict:del output_dict['_sa_instance_state']return output_dict@app.teardown_request def handle_teardown_request(ex):db.session.remove()@app.after_request def after_request(response):#录影响性能的缓慢数据库查询for query in get_debug_queries():if query.duration >= app.config['FLASKY_DB_QUERY_TIMEOUT']:print '#####Slow query:%s \nParameters:%s \nDuration:%fs\nContext:%s\n #####'% \(query.statement, query.parameters, query.duration,query.context)return response@app.route('/users/<email>') def line_test(email):result_id=db.session.query(User.id).filter_by(email=email).first()return jsonify({'code':200,'email':email,'id':result_id[0]})if __name__=='__main__':app.run(debug=True)
运行结果如下:
* Detected change in '/home/rgc/baidu_eye/carrier/test/flask_test_mongo.py', reloading* Restarting with reloader #####Slow query:SELECT user.id AS user_id FROM user WHERE user.email = %s LIMIT %s Parameters:('3@qq.com', 1) Duration:0.000331s Context:/home/rgc/baidu_eye/carrier/test/flask_test_mongo.py:47 (line_test)##### 127.0.0.1 - - [07/Mar/2018 18:37:05] "GET /users/3@qq.com HTTP/1.1" 200 -
通过此方式,把查询缓慢的数据记录到日志中,便可以进行针对性的数据库优化,提升用户体验。
转载于:https://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_605days.html
项目中记录影响性能的缓慢数据库查询相关推荐
- php怎么使用多个数据库,怎么在php项目中使用CI对多个数据库进行操作
怎么在php项目中使用CI对多个数据库进行操作 发布时间:2020-12-19 16:57:21 来源:亿速云 阅读:87 作者:Leah 今天就跟大家聊聊有关怎么在php项目中使用CI对多个数据库进 ...
- android项目中记录ListView滚动停止位置与设置显示位置
2019独角兽企业重金招聘Python工程师标准>>> 在项目中经常使用到listView控件,当想记录滚动停止时的记录,当点击加载新的数据,从记录的位置开始显示的操作怎么实现尼?分 ...
- java批量处理数据库语句_Java项目中调用bat批处理进行多用户数据库备份
Java项目中调用bat批处理配合使用BCP进行多用户数据的备份 一.项目需求 最近项目中需要对数据库(Sql Server系列数据库)进行备份.项目中的需求不是简单的整个数据库的备份,而是根据用户来 ...
- ufserver文件上传服务器-用来管理你项目中的图片-性能可比Java、Python高十倍不止
大家在做项目的时候如果是web项目,项目又不大的情况下上传图片一般都是上传到项目的webapp目录下面,webapp下面会有一个upload的文件夹,今天给大家分享的是在项目中如何把图片上传到其他服务 ...
- Struts项目中,检测用户名是否被占用/查询账户名称是否被占用/查询账户名称是否已被注册/检查用户名是否被注册
在客户端无法检测注册用户名是否被占用,这需要查询数据库,所以是服务器端负责这块. 实现思路大致描述: 注册表单中添加自动检测用户名是否被占用的功能,其实就是利用 ajax 向服务器发送请求,并带着用户 ...
- 在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合
在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的 ...
- sqlserver数据库迁移mysql_在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合...
在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的 ...
- sqlserver 导入mysql,在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合...
在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的 ...
- 大型EAI项目中的ORACLE 数据库管理(ZT)
数据库在大型EAI(企业应用集成)项目中扮演着至关重要的角色.目前许多企业都迫切需要将其自身传统的管理与运作模式转化为先进.高效的信息化管理与运作模式.在实施企业信息化的过程中,怎样将该企业原有大量数 ...
最新文章
- 杭电2099 整除的尾数
- php margin参数,margin参数简单介绍_html/css_WEB-ITnose
- LINQ To SQL 语法及实例大全
- C# 算法题系列(一) 两数之和、无重复字符的最长子串
- Waiting 180 more seconds for 1 worker threads to finish
- wait和notify使用例子
- syn重发_什么是“SYN”请求?ISN又是什么?
- VS2010链接SQLsever2008数据库时出现[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒
- 印象笔记打开错误_只会用手机自带便签?这三款笔记软件分分钟秒杀
- linux中csh怎么运行,bash csh 设置环境变量 方法例子
- memcached可视化客户端工具
- Memcached在Windows7上的安装问题
- matlab在mac中好用吗,Matlab Mac版上手
- 远程小组软件开发过程(3):人
- uniapp-页面内/页面间数据的流动传递-this-that
- java 子网掩码 位数_java实现子网掩码转换为网络标识位 | 学步园
- 在线html调试,debugger调试
- java操作word文档(文字,图片,表格添加以及替换操作)
- 拯救者R7000ubuntu18.04解决分屏问题(NVIDIA显卡驱动安装)
- pdf 转 word 支持各种格式【在线办公工具】
热门文章
- axios学习笔记(二):轻松弄懂XHR的使用及如何封装简易axios
- 用css及jQuery实现的精美拉下菜单导航条
- 7-107 找出三位水仙花数 (15 分)
- 算法分析之对问题建模
- mysql bundle 安装_阿里云服务器下安装MySQL (Bundle压缩包 安装)
- idea 使用 maven 整合 ssm 框架 实现简单的增、删、改 和 分页查询功能
- 什么是进程?什么是线程?
- mysql十万条数据_2秒内向数据库中插入十万条数据?
- cpython python 区别面试_python基础教程之千万不要错过这几道Python面试题
- MySQL中通配类型各自作用_在Access数据库中。在查找操作中,通配符*、?与#各有什么作用?...