SQLAlchemy 2.0 迁移:如何开启 warn_20

SQLAlchemy 2.0 migration: how to turn on warn_20

我正在尝试将我的项目迁移到 SQLA 2.0。 The docs say to turn on sqlalchemy_warn_20,但我想不出 where/how 来做这个。

具体来说,这是去哪里:

SQLALCHEMY_WARN_20=1 python -W always::DeprecationWarning

我尝试进入测试文件夹 运行

SQLALCHEMY_WARN_20=1 python -W always::DeprecationWarning pytest

没有成功。我尝试了一些其他类似的组合。我不确定还能尝试什么。

警告分为两个级别:

1。 Python 级别

Python 3 默认抑制 DeprecationWarnings,因此我们需要通过使用 -W always(或某些变体)

调用解释器来启用它们
python -W always my_app.py

或通过将 PYTHONWARNINGS 环境变量设置为“始终”。

2。 SQLAlchemy 级别

实际的 SQLAlchemy 2.0 版弃用警告是通过设置环境变量 SQLALCHEMY_WARN_20=1 启用的。您可以在命令行中执行此操作

SQLALCHEMY_WARN_20=1 python -W always my_app.py

注意:pytest

虽然 pytest 通常仅通过使用 pytest 来调用,但它也可以作为 python -m pytest 来调用,因此上面的代码是

SQLALCHEMY_WARN_20=1 python -W always -m pytest

如果你不想麻烦确保你的环境设置 and/or 不想记住将标志传递给 python,你也可以将以下内容放在 Python 代码本身:

import os
import sys
import warnings

os.environ['SQLALCHEMY_WARN_20'] = 'yes'
if not sys.warnoptions:
    warnings.simplefilter("default")

你可以把它放在脚本的顶部,就在你的 script/app 的解释器行之后,或者如果它是一个包并且你想让任何导入它的人看到警告,你可以把它放在顶级 __init__.py。无论哪种方式都应该使它从那时起在全球范围内生效

如果您对包或模块执行此操作,请确保将其放在任何其他导入之前,否则您可能会错过导入单个模块时出现的警告