在sqlalchemy中关闭警告

时间:2011-03-07 22:00:05

标签: python postgresql sqlalchemy

我正在使用sqlalchemy进行反射,我的数据库中的一些部分索引会使它转储警告:

SAWarning: Predicate of partial index i_some_index ignored during reflection

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

2 个答案:

答案 0 :(得分:41)

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...

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

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

答案 1 :(得分:6)

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