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

FastAPI Python中修改模型后如何更新SQLite数据库表字段?

报错根本原因

你修改了ORM模型中Company表的主键名称,但数据库里实际的company表结构没有同步更新,依然用building_id作为主键列名,同时Building表的外键关联的是不存在的company.company_id字段,因此触发报错。SQLite本身对ALTER TABLE修改列、主键的操作支持有限,无法直接通过修改列名快速解决。


方案1:测试数据无需保留(最快捷)

  • 直接删除本地的SQLite数据库文件
  • 重新运行SQLAlchemy的create_all()方法即可生成符合新模型的表结构

这个方案适合纯测试场景,没有需要保留的业务数据,操作成本最低。


方案2:需要保留现有数据,手动执行SQL迁移

操作前先备份你的数据库文件,避免操作失误丢失数据,之后执行以下SQL语句:

-- 临时关闭外键约束检查,避免迁移过程中触发外键报错
PRAGMA foreign_keys=off;

-- 重命名旧company表为临时表
ALTER TABLE company RENAME TO company_old;

-- 创建字段修正后的新company表
CREATE TABLE company (
    company_id INTEGER PRIMARY KEY NOT NULL,
    name TEXT NOT NULL
);

-- 迁移旧数据到新表,原building_id的值直接作为新的company_id
INSERT INTO company (company_id, name)
SELECT building_id, name FROM company_old;

-- 删除旧的临时表
DROP TABLE company_old;

-- 重新开启外键约束检查
PRAGMA foreign_keys=on;

执行完SQL后确认你的模型代码已经修正:Company类的主键改为company_id = Column(Integer, primary_key=True, nullable=False, index=True),Building类的ForeignKey('company.company_id')保持现有写法即可。


方案3:长期项目建议用迁移工具

后续如果需要频繁修改表结构,建议使用SQLAlchemy配套的Alembic迁移工具,可以实现表结构的版本化管理,修改模型后自动生成迁移脚本,不需要手动编写SQL处理结构变更。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:02