我对 SQLModel 还很陌生,所以请多包涵。
我按照他们网站上的 sqlmodel 教程并创建了我自己的 SQLModel 子类:
class Vehicle(SQLModel, table=True):
__tablename__ = "vehicle"
id: int = Field(primary_key=True)
url: str = Field(unique=True)
vehicle_name: str | None = Field(default=None, nullable=True)
然后我创建引擎并将该模型应用到数据库:
url = "< my database url >"
engine = sqlmodel.create_engine(url)
Vehicle.metadata.create_all(engine)
第一次运行此代码时,一切正常。表格已创建,所有定义的列都已存在。但如果我更改车辆模型上的某些属性并再次运行此代码,则表格上没有任何变化。
为什么会发生这种情况?我该如何解决?如果我对车辆模型进行了某些更改,我希望该更改能够被检测到并自动迁移到数据库。
SQLModel 使用 SQLAlchemy 库并在此基础上构建。该
create_all()
函数直接从 SQLAlchemy 导入。以下是相关文档:这意味着一旦创建,SQLModel 将不会尝试更改数据库表的架构。要管理架构迁移,您可以查看alembic之类的工具,该工具旨在与 SQLAlchemy 配合使用。网上有一些关于如何将 alembic 与 SQLModel 结合使用的优秀资源(例如这个)。