【问题标题】:sqlalchemy query duration loggingsqlalchemy 查询持续时间日志记录
【发布时间】:2014-08-05 17:52:13
【问题描述】:

如果有人问过这个问题,我深表歉意,但我找不到我要找的确切内容。

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

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

我们以几种不同的方式使用 sqlalchemy:我们使用 ORM,我们使用查询构建器,我们甚至使用传递给执行的文本查询。如果无论使用哪种 sqlalchemy 都有一个信号会触发函数,那将是完美的。

我也在考虑找到代码中实际通过网络发送查询的位置,如果有人对此有所了解,那就太好了。

我想得越多,我就越觉得如果它很痛苦可能不值得付出努力,但如果有人知道可以挽救一天的钩子,我想我会问。作为记录,我正在使用带有 Flask-Sqlalchemy 扩展的 Flask。

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

谢谢!

【问题讨论】:

    标签: python mysql sql sqlalchemy flask-sqlalchemy


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-02
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 2011-09-01
      • 2015-04-17
      相关资源
      最近更新 更多