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
。无论哪种方式都应该使它从那时起在全球范围内生效
如果您对包或模块执行此操作,请确保将其放在任何其他导入之前,否则您可能会错过导入单个模块时出现的警告
我正在尝试将我的项目迁移到 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
。无论哪种方式都应该使它从那时起在全球范围内生效
如果您对包或模块执行此操作,请确保将其放在任何其他导入之前,否则您可能会错过导入单个模块时出现的警告