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

测试时Base=declarative_base(bind=engine)触发警告,如何迁移至SQLAlchemy 2.0?

迁移SQLAlchemy declarative_base至2.0版本解决RemovedIn20Warning

在SQLAlchemy 2.0中,declarative_base()已被标记为弃用,官方推荐使用新的声明式基类方案,以下是两种迁移方式:

方式一:使用DeclarativeBase类(推荐)

这是2.0版本的标准用法,直接继承DeclarativeBase创建你的基类:

from sqlalchemy.orm import DeclarativeBase
from sqlalchemy import MetaData

# 基础用法,后续在create_all时指定引擎
class Base(DeclarativeBase):
    pass

# 初始化表结构
Base.metadata.create_all(bind=engine)

# 可选:提前绑定引擎到metadata
class Base(DeclarativeBase):
    metadata = MetaData(bind=engine)

# 此时create_all可省略bind参数
Base.metadata.create_all()

你的模型类依然像之前一样继承这个Base类即可,完全兼容原有写法。

方式二:使用Registry(适用于多基类场景)

如果需要更灵活的映射控制(比如多个独立的声明式基类),可以使用registry:

from sqlalchemy.orm import registry

# 创建registry实例
mapper_registry = registry()

# 生成声明式基类
Base = mapper_registry.generate_base()

# 初始化表结构,两种方式都可行
mapper_registry.metadata.create_all(bind=engine)
# 或者
Base.metadata.create_all(bind=engine)

关键说明

  • 原有的declarative_base()在2.0中暂时仍可使用,但会触发RemovedIn20Warning,建议尽快迁移到新方案
  • 模型类的定义逻辑无需修改,仅需替换基类的创建方式
  • metadata.create_all()的调用方式与之前完全兼容,无需额外调整

内容的提问来源于stack exchange,提问作者Selva Kumaresan Ramakrishnan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:54:56