我正在使用烧瓶和 SQL Alchemy 开发应用程序。我需要显示执行的查询以生成页面以及每个查询用于调试的时间
最好的方法是什么?
如果你正在使用 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
and sqlalchemy
。
如果您想使用 native 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!
如果不手动将它们连接到您的项目中,解释/选择端点将无法工作,但至少您的查询调试器(count 和 sql)可以工作。我试图了解我的炼金术正在形成什么样的查询,我明白了。
如果您使用自己的 python 日志记录配置,您可能只想在 config 中将“sqlalchemy.engine”记录器的级别设置为“INFO”。
有很多方法可以配置您的 python 日志记录,但这里有一个使用示例logging.config.dictConfig()
import logging.config
logging.config.dictConfig({
...
'loggers': {
'sqlalchemy.engine': {
'level': 'INFO',
'handlers': ...
}
}
})
除了 Cawb07 为我解决的答案之外,请确保
DEBUG_TB_INTERCEPT_REDIRECTS
在重定向之前查询时已设置为 True。