【问题标题】:Turn off a warning in sqlalchemy在 sqlalchemy 中关闭警告
【发布时间】:2011-07-10 16:38:06
【问题描述】:

我正在使用带有反射的 sqlalchemy,我的数据库中的几个部分索引使其转储如下警告:

SAWarning: Predicate of partial index i_some_index ignored during reflection

进入我的日志并保持混乱。它不会妨碍我的应用程序行为。我想在开发时保留这些警告,但不是在生产级别。有谁知道如何关闭它?

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    Python 的warning module 提供了一个方便的context manager,可以为您捕获警告。

    这是过滤掉 SQLAlchemy 警告的方法。

    import warnings
    from sqlalchemy import exc as sa_exc
    
    with warnings.catch_warnings():
        warnings.simplefilter("ignore", category=sa_exc.SAWarning)
        # code here...
    

    对于开发与生产,您可以只在应用程序的入口点或在生产环境中调用应用程序的外部脚本环绕此警告。

    通常,我通过一个环境变量来解决这个问题,该变量执行的代码路径与开发时略有不同,例如,包装不同的中间件等。

    【讨论】:

    • 谢谢,我试试这个。不过,我想知道它是否可以在某种意义上转向?
    • 这太棒了。 Python 应有尽有!
    • 它对我不起作用。警告仍然弹出:usr/local/lib/python3.5/dist-packages/pymysql/cursors.py:170:警告:(1364,“字段'external_id'没有默认值”)
    • 我发现了我的问题。这不是“sa_exc.SAWarning”。我只需要删除类别,然后可以抑制警告。
    【解决方案2】:

    警告意味着您进行了表或元数据反射,它正在读取具有某些复杂条件的 postgresql 索引,而 SQLAlchemy 反射代码不知道如何处理。这是一个无害的警告,因为是否反映索引不会影响应用程序的操作,除非您想为另一个数据库上的这些表/索引重新发出 CREATE 语句。

    【讨论】:

    • 谢谢。我知道它们是无害的,我的应用程序运行良好。但是每次守护进程重新启动时,这些警告都会发送到我的 apache 错误日志中,并且它们会变得混乱。有没有办法完全关闭索引反射?
    • 我认为在开始时调整警告过滤器的建议是一个好主意。为此,我们通过警告来做到这一点。目前没有索引反射选项(虽然实现起来并不难)。
    • 好的,我会选择上面的答案,可能会在我进行反射的部分捕捉到警告。索引反射确实没有很大的开销,所以我不会付出太多努力:) 非常感谢!
    猜你喜欢
    • 2012-07-19
    • 2018-08-26
    • 2015-05-19
    • 2011-04-05
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多