You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码中设置SQLALCHEMY_SILENCE_UBER_WARNING无法屏蔽SQLAlchemy弃用警告

问题描述

我正在开发的Python包基于SQLAlchemy v1.4,近期暂无升级到v2版本的计划。已将依赖要求设置为SQLAlchemy>=1.3,<2.0,但运行测试时仍收到弃用警告:

[...]/src/db/base.py:12: MovedIn20Warning: Deprecated API features detected! These feature(s) are not compatible with SQLAlchemy 2.0. To prevent incompatible upgrades prior to updating applications, ensure requirements files are pinned to "sqlalchemy<2.0". Set environment variable SQLALCHEMY_WARN_20=1 to show all deprecation warnings. Set environment variable SQLALCHEMY_SILENCE_UBER_WARNING=1 to silence this message. (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)

触发警告的代码行是:

PublicBase = sqlalchemy.ext.declarative.declarative_base(metadata=sqlalchemy.schema.MetaData(schema='public'))

这是首次调用SQLAlchemy执行操作的代码。尝试按提示设置SQLALCHEMY_SILENCE_UBER_WARNING环境变量屏蔽警告:在shell中执行export SQLALCHEMY_SILENCE_UBER_WARNING=1可生效,但在代码中通过os.environ['SQLALCHEMY_SILENCE_UBER_WARNING'] = '1'设置(放在触发警告代码行之前),虽已确认变量已设置为1,但警告仍会出现。不希望每位测试用户都手动设置该变量,求解决方法。

解决方案

方法1:在导入SQLAlchemy前设置环境变量

SQLAlchemy在模块导入阶段就会读取SQLALCHEMY_SILENCE_UBER_WARNING变量,必须把环境变量设置代码放在导入SQLAlchemy的语句之前,示例:

import os
os.environ['SQLALCHEMY_SILENCE_UBER_WARNING'] = '1'

# 之后再导入SQLAlchemy
import sqlalchemy

方法2:使用Python警告过滤器屏蔽特定警告

如果设置环境变量仍有问题,可直接用Python内置的warnings模块过滤MovedIn20Warning,同样要放在导入SQLAlchemy前执行:

import warnings
from sqlalchemy.exc import MovedIn20Warning

warnings.filterwarnings("ignore", category=MovedIn20Warning)

import sqlalchemy

方法3:在测试框架配置中全局设置环境变量

如果使用pytest等测试框架,可在conftest.py中设置环境变量,确保所有测试运行前生效:

# conftest.py
import os
import pytest

def pytest_sessionstart(session):
    os.environ['SQLALCHEMY_SILENCE_UBER_WARNING'] = '1'

方法4:在开发工具配置中预设环境变量

如果使用tox、poetry等工具,可在配置文件中直接预设环境变量:

  • tox:在tox.ini的[testenv]段添加setenv = SQLALCHEMY_SILENCE_UBER_WARNING=1
  • poetry:在pyproject.toml的测试命令前添加环境变量前缀,比如test = "SQLALCHEMY_SILENCE_UBER_WARNING=1 pytest"

内容的提问来源于stack exchange,提问作者tospo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:03:28