Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >项目中记录影响性能的缓慢数据库查询

项目中记录影响性能的缓慢数据库查询

作者头像
用户1558882
发布于 2018-04-03 08:10:59
发布于 2018-04-03 08:10:59
1.6K00
代码可运行
举报
文章被收录于专栏:RgcRgc
运行总次数:0
代码可运行

如果程序性能随着时间推移不断降低,那很有可能是因为数据库查询变慢了,随着数据库规模的增长,这一情况还会变得更糟。优化数据库有时很简单,需要在程序和数据库之间加入缓存。大多数数据库查询语言都提供了explain语句,用来显示数据库执行查询时采取的步骤。从这些步骤中,我们经常能发现数据库或索引设计的不足之处。过 ,在开始优化查询之前,我们必须要知道哪些查询是值得优化的。在一次典型请求中,可能要执行多条数据库查询,所以经常很难分辨哪一条查询较慢。Flask-SQLAlchemy提供了一个选项,可以记录请求中执行的与数据库查询相关的统计数字。                                                                     

                                                           ——Flask Web开发:基于Python的Web应用开发实战

具体操作步骤如下:

  1.设置语句查询最低时间值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.config['FLASKY_DB_QUERY_TIMEOUT']=0.00000000001

   2.在每次api请求结束后,判断每条查询语句执行时间是否低于设定的值,如果低于,则记录下查询语句相关信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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) 属性含义如图:  

全部代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding:utf8
from flask import Flask, jsonify
import time

from flask_sqlalchemy import SQLAlchemy, get_debug_queries

db = 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 = email

    def 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)

运行结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 * 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 -

通过此方式,把查询缓慢的数据记录到日志中,便可以进行针对性的数据库优化,提升用户体验。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python flask web 博客实例 restful api 5
|-flasky |-app/ |-api_1_0 |-init.py |-users.py |-posts.py |-comments.py |-authentication.py |-errors.py |-decorators.py
用户5760343
2019/07/05
7140
【一周掌握Flask框架学习笔记】Flask中使用数据库(使用Flask-SQLAlchemy管理数据库)
SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升 SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。
天道Vax的时间宝藏
2021/08/11
4.5K0
数据库|Flask实现简单搜索功能
用Flask实现简单搜索功能主要是通过form的方式传值,再到数据库中查询。下面是数据库的内容,主要是实现对content进行模糊匹配。
算法与编程之美
2020/03/25
3.6K0
Flask框架在Python面试中的应用与实战
Flask,作为轻量级且灵活的Python Web开发框架,因其简洁的API、强大的扩展性以及对初学者友好的特性,广受开发者和企业的青睐。在Python面试中,对Flask框架的理解与应用能力往往是考察的重点之一。本篇博客将深入浅出地探讨Flask在面试中的常见问题、易错点及应对策略,并结合实例代码进行讲解。
Jimaks
2024/04/21
3690
盘点Flask与数据库的交互插件--Flask-Sqlalchemy
在我们做web开发的时候,经常需要用到与数据库交互,因为我们的数据通常都是保存在数据库中的,如果有人需要访问,就必须与数据库访问,所以今天我们介绍一个Flask中与数据库交互的插件---Flask-Sqlalchemy。
Python进阶者
2021/08/20
2.5K0
flask 完成简单查询请求处理,及跨域
http://docs.jinkan.org/docs/flask/quickstart.html#a-minimal-application
流川疯
2019/05/14
1.4K0
图书馆数据库系统
library.py """ 分析图书馆案例 - 1.数据库配置 - 作者模型(一方) - 书籍模型(多方) - 2.添加测试数据 - 3.添加作者,书籍 - 4.删除作者,删除书籍 """ from flask import Flask, render_template, request, redirect,flash from flask_sqlalchemy import SQLAlchemy from flask_wtf.csrf import CSRFProtect app = Fl
小闫同学啊
2019/07/18
2.4K0
Flask_数据库
版权声明:Copyright © https://blog.csdn.net/zzw19951261/article/details/81148625
zhengzongwei
2019/07/31
1.4K0
Flask(数据库和模型 十)
'mysql+pymysql://root:123456@localhost:3306/demo'按照示例填写即可
zx钟
2020/07/16
7340
小白学Flask第十二天| flask-sqlalchemy数据库扩展包(二)
今天整体的内容比较的简单,就是数据库的简单操作。大家只要记住这些语句就能够好好玩耍flask-sqlalchemy数据库了。
Python进击者
2019/10/10
5800
小白学Flask第十二天| flask-sqlalchemy数据库扩展包(二)
Flask 扫盲系列-数据库
在前面的学习中,我们已经简单搭建了一个在线股票走势查询系统,并且了解了 Flask 中的上下文,那么今天我们一起来学习下 Flask 中的数据库操作。
周萝卜
2020/05/22
7950
mysql数据库优化(四)-项目实战
在flask项目中,防止随着时间的流逝,数据库数据越来越多,导致接口访问数据库速度变慢。所以自己填充数据进行测试及 mysql优化
用户1558882
2018/10/22
1.5K0
mysql数据库优化(四)-项目实战
[742]Flask数据库过滤器与查询集
flask-sqlalchemy所作的操作只是把模型类转换为sql语句,然后通过数据库驱动访问mysql,在获取到结果后再把数据转换为模型对象
周小董
2020/01/13
7K0
Flask 框架实现自定义分页
手撸的表格分页: Flask框架下的分页,我研究了很久,自带的分页方法不稳定,还不如自己手撸的好使.
王瑞MVP
2022/12/28
5140
Flask 自定义模型类
模型表示程序使用的数据实体,在Flask-SQLAlchemy中,模型一般是Python类,继承自db.Model,db是SQLAlchemy类的实例,代表程序使用的数据库。
Devops海洋的渔夫
2020/01/15
1.7K0
Flask 自定义模型类
Flask 操作Mysql数据库 - flask-sqlalchemy扩展
https://flask-sqlalchemy.palletsprojects.com/en/master/quickstart/
Devops海洋的渔夫
2019/12/26
21.5K0
28. Flask 使用unittest进行单元测试
Web程序开发过程一般包括以下几个阶段:需求分析,设计阶段,实现阶段,测试阶段。其中测试阶段通过人工或自动来运行测试某个系统的功能。目的是检验其是否满足需求,并得出特定的结果,以达到弄清楚预期结果和实际结果之间的差别的最终目的。
Devops海洋的渔夫
2020/02/18
3.1K0
28. Flask 使用unittest进行单元测试
Haytham个人博客开发日志 -- Flask+Vue基于token的登录状态与路由管理
这是一篇个人博客搭建的记录博客,也是一篇关于Flask和Vue的简单"工具书",最后的代码会包含Web开发中常用的功能。(不全,只是使用频率相对高的)
HaythamXu
2019/09/15
1.8K0
Flask Paginate实现表格分页
flask_paginate 是 Flask 框架的一个分页扩展,用于处理分页相关的功能。它可以帮助你在 Flask Web 应用程序中实现分页功能,让用户可以浏览大量数据的不同部分。本篇博文重点讲述在Web开发中,用paginate把所有数据进行分页展示,首先通过运用第三方库实现后端分页,然后再自己编写一个分页类实现。
王瑞MVP
2023/11/26
5280
Flask Paginate实现表格分页
Flask数据库
Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的。它使用结构化的查询语言。关系型数据库的列定义了表中表示的实体的数据属性。比如:商品表里有name、price、number等。 Flask本身不限定数据库的选择,你可以选择SQL或NOSQL的任何一种。也可以选择更方便的SQLALchemy,类似于Django的ORM。SQLALchemy实际上是对数据库的抽象,让开发者不用直接和SQL语句打交道,而是通过Python对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升。
py3study
2020/01/16
3K0
相关推荐
python flask web 博客实例 restful api 5
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验