Flask(web)使用sqlalchemy查看sql语句的性能

如果程序性能随着时间推移不断降低,那很有可能是因为数据库查询变慢了,随着数据库规模的增长,这一情况还会变得更加严重。普通优化其实很简单,只需添加合适的索引,不过在开始优化查询之前,我们必须知道那些查询是值得优化的。可以在数据库中explain对应查询语句但是这样实在太慢而且让人感觉恶心,这时就完全可以使用Flask的请求钩子函数配合sqlalchemy进行查询语句的相关统计。

from flask.ext.sqlalchemy import get_debug_queries


@app.after_request
def af_request(response):
    for query in get_debug_queries():
        if query.duration >= current_app.config['FALSK_SLOW_DB_QUERY_TIME']:
            current_app.logger.warning(
                    'Slow query: %s\nParameters: %s\nDuration: %fs\nContext:
                    %s\n' %(query.statement, query.parameters, query.duration,
                        query.context)
                    )
            return response

这个功能使用after_app_requestq请求钩子实现的,在视图函数处理完成之后执行。Flask把响应对象传给after_app_request处理程序,以防修改响应。

本例中after_app_request只是获取flak_sqlalchemy记录的查询时间并把运行缓慢的的查询写入日志。

默认情况下,get_debug_queries()函数只在调试模式中可用。

posted @ 2018-04-19 14:21  lz_tmac  阅读(424)  评论(0编辑  收藏  举报