sqlalchemy查询持续时间记录

时间:2014-06-15 22:27:48

标签: python mysql sql sqlalchemy flask-sqlalchemy

如果已经有人问过我,我很抱歉,但我无法找到我想要的东西。

我正在寻找将sqlalchemy的查询持续时间记录到syslog的最佳方法。

我已经读过这个:http://docs.sqlalchemy.org/en/rel_0_9/core/engines.html#configuring-logging而且我已经读过有关sqlalchemy信号的内容,但我不确定它们是否适合我正在尝试的内容去做。 echo和echo_pool标志似乎只是登录到stdout?我也想要比他们提供的更多信息。在我完美的世界中,对于每个查询,我都可以获得查询字符串,查询的持续时间,甚至是python堆栈跟踪。

我们以不同的方式使用sqlalchemy:我们使用ORM,我们使用查询构建器,甚至使用传递执行的文本查询。如果有一个信号会使某个函数跳闸而不管sqlalchemy的使用方式,那将是完美的。

我还在考虑在代码中找到它实际通过网络发送查询的位置,如果有人在那里有一些见解,那也会很棒。

我想的越多,我认为如果痛苦就不值得努力,但如果那里有人知道可以挽救这一天的钩子,我想我就是这样。请问。为了记录,我使用Flask和Flask-Sqlalchemy扩展。

如果这里有任何不清楚的地方,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:4)

Flask-SQLAlchemy在调试模式下(或者以其他方式设置选项时)已经记录了有关每个查询的信息。你可以使用get_debug_queries()来获取它。

如果您使用Flask-DebugToolbar,则会提供叠加层,以便您为每个请求浏览此数据。

如果你想记录这个,你可以添加一个函数,在每个记录此信息的请求之后触发。

@app.after_request
def record_queries(response):
    for info in get_debug_queries():
        # write to syslog here

    return response