在sqlalchemy中关闭警告

von*_*hev 26 python postgresql sqlalchemy

我正在使用sqlalchemy和反射,我的数据库中的几个部分索引使它转储像这样的警告:

SAWarning: Predicate of partial index i_some_index ignored during reflection

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

Mah*_*der 43

Python的警告模块提供了一个方便的上下文管理器,可以为您捕获警告.

以下是过滤SQLAlchemy警告的方法.

import warnings
from sqlalchemy import exc as sa_exc

with warnings.catch_warnings():
    warnings.simplefilter("ignore", category=sa_exc.SAWarning)
    # code here...
Run Code Online (Sandbox Code Playgroud)

至于开发与生产,您可以在应用程序的入口点或在生产环境中调用应用程序的外部脚本中包含此警告.

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

  • 这太棒了.Python拥有一切! (3认同)

zzz*_*eek 9

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

  • 谢谢.我知道它们是无害的,我的应用程序非常好.但每次守护进程重新启动时,这些警告都会发送到我的apache错误日志中,并且它们会混乱.有没有办法真正关闭索引反射? (2认同)
  • 我认为从一开始就调整警告过滤器的建议是个好主意。为此,我们通过警告来做到这一点。目前没有索引反射的选项(尽管实现起来并不是很难)。 (2认同)