数据库工具

    装饰器是在 之后建模的—它们是可调用的,并把其他调用作为它们的参数之一。它们调用可调用函数来调用(可能是包装的)数据库查询,并且它们可以围绕这个调用做一些工作。然而,它们通过用户代码来创建和安装,因此不需要独立像中间件这样的独立文件。

    wrapper方法的安装是在上下文管理器中完成的 — 因此wrapper方法是暂时的, 也是针对于你代码里的某些特定逻辑的.

    正如上面提到的, 一个使用wrapper方法的例子是阻塞查询的执行. 类似的代码为:

    发给wrapper方法的参数是:

    • sql — 一个 str,要发送到数据库的SQL 查询。
    • many — 一个布尔值,标识最终的调用是否是 还是 executemany() (以及 params 是否是一个值系列,还是一系列值的序列)。

    使用这个参数,稍微复杂一点的阻塞函数包含在错误信息中的连接名:

    有关更完整的例子,一个查询日志器看起来像这样:

    execute_wrapper(wrapper)

    返回一个上下文管理器,当进入时,会安装一个围绕数据库查询执行的装饰器,当离开时,会移除这个装饰器。装饰器是在本地线程的连接对象上安装的。

    是一个带有五个参数的可调用函数。它在上下文管理器的范围内被每个查询调用,带着上面所述的五个参数 execute, sql, params, many, and context 。它预计会调用 ,并且返回那个调用的返回值。