当数据库处于活动状态时,如何使用新列更新Heroku数据库?

2024-04-18 19:45:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有一个使用Flask的实时Heroku psql数据库,其中包含我需要的数据。但是,我还需要使用表中的新列更新数据库。每当我更新表并将其推送到Heroku时,应用程序就会关闭,说原始数据不符合新模式。那么,用托管在Heroku上的数据更新数据库结构的最佳方法是什么呢

例如: 模型_original.py

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String, unique=True, nullable=False)

到 新型号

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String, unique=True, nullable=False)
    last_name = db.Column(db.String, unique=True, nullable=False)

Tags: 数据nameid数据库falsetruedbheroku
1条回答
网友
1楼 · 发布于 2024-04-18 19:45:19

迁移

一般公认的最佳实践方法是使用库或其他解决方案来管理数据库迁移—添加、删除、重命名列、表、索引等。正如Chris在评论中指出的那样,Flask-Migrate是使用Flask和SQLAlchemy进行数据库迁移的流行解决方案

迁移(更新列或表)将作为部署过程的一部分发生,就在应用程序重新启动之前。必须注意“破坏性”迁移(删除、重命名列和表),因为在零停机部署的情况下,迁移时将运行“以前版本”的应用程序。该“早期版本”应用程序将具有“早期版本”SQLAlchemy模型,此时该模型具有额外的列或名称错误的列。正如您现在看到的,这将导致错误

更新表格的问题

至于您在更新表时遇到的问题以及出现错误,我怀疑您在描述问题时犯了错误,或者存在其他一些误解。你说:

Whenever I update the table and push it to Heroku, the app shuts down saying that the original data does not follow the new schema.

如果您没有使用迁移库,并且正在Postgres中手动更新表,则不必推送任何代码

但是,您的代码示例表明您正在更新SQLAlchemy模型定义,而不是Postgres结构。如果您更新模型(例如添加一列),但它与表结构不匹配,SQLAlchemy将抛出错误

相关问题 更多 >