【发布时间】:2012-09-11 12:03:33
【问题描述】:
我正在使用烧瓶和 SQL Alchemy 开发一个应用程序。 我需要显示为生成页面而执行的查询以及每个查询用于调试的时间
最好的方法是什么?
【问题讨论】:
标签: sqlalchemy flask
我正在使用烧瓶和 SQL Alchemy 开发一个应用程序。 我需要显示为生成页面而执行的查询以及每个查询用于调试的时间
最好的方法是什么?
【问题讨论】:
标签: sqlalchemy flask
如果你正在使用 Flask-SQLAlchemy 扩展并且不想打扰create_engine,你可以设置配置密钥SQLALCHEMY_ECHO=True。
【讨论】:
app.config['SQLALCHEMY_ECHO'] = True
【讨论】:
我自己没用过,不过似乎 Flask Debug-toolbar 可以帮上忙。
https://github.com/mgood/flask-debugtoolbar
它是 django-debug-toolbar 的一个端口,可用于分析查询。
Flask Debug-toolbar 的文档没有提到它,但是有一个 SQLAlchemyDebugPanel 的代码。
所以我认为看看这个项目可能很值得,看看它是否能满足你的需要。
【讨论】:
延迟回复但在 sqlalchemy create_engine 中设置“echo=True”将记录执行的查询和时间。
【讨论】:
我不确定是否要从中生成网页,但调试/记录数据库查询的一种好方法是使用 SQLAlchemy 的 get_debug_queries()。
## in app/main/views.py . (my app's main endpoint file)
from flask import current_app
from flask_sqlalchemy import get_debug_queries
@main.after_app_request
def after_request(response):
for query in get_debug_queries():
if query.duration >= current_app.config['FLASKY_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
这里发生了很多事情,让我们分解一下:
不要忘记在 config.py 配置类中设置配置变量:
SQLALCHEMY_RECORD_QUERIES = True
FLASKY_SLOW_DB_QUERY_TIME = 0.5
【讨论】:
其他答案仅适用于flask_sqlalchemy,不适用于flask 和sqlalchemy。
如果您想使用原生 SQLAlchemy,您可以快速修复:http://yuji.wordpress.com/2014/01/07/use-native-sqlalchemy-in-flask-debugtoolbar/
from flask.ext.sqlalchemy import _EngineDebuggingSignalEvents
_EngineDebuggingSignalEvents(engine, app.import_name).register()
# use at your own risk! a development environment shouldn't really care though!
如果不手动将它们连接到您的项目中,解释/选择端点将无法工作,但至少您的查询调试器(计数和 sql)可以工作。我试图了解我的炼金术正在形成什么样的查询,我明白了。
【讨论】:
如果您使用自己的 python 日志记录配置,您可能只想简单地set the level of the 'sqlalchemy.engine' logger to 'INFO' in your config。
有很多方法可以配置你的 python 日志记录,这里有一个例子using logging.config.dictConfig()
import logging.config
logging.config.dictConfig({
...
'loggers': {
'sqlalchemy.engine': {
'level': 'INFO',
'handlers': ...
}
}
})
【讨论】:
除了 Cawb07 为我解决的答案之外,请确保您有
DEBUG_TB_INTERCEPT_REDIRECTS 在重定向前查询时设置为 True。
【讨论】: