【问题标题】:SQLAlchemy: How can I update the table in the database when I update the model in models.pySQLAlchemy:当我在models.py中更新模型时,如何更新数据库中的表
【发布时间】:2019-06-02 23:45:58
【问题描述】:

我有一个名为 User 的 SQLAlchemy 模型,我想向该类添加另一个属性,例如:address

我尝试添加一个新的类属性,并希望 SQLAlchemy 能够意识到类中的变化并自动更新表。事实并非如此。

我在网上查看了如何对模型进行更改,然后自动更新表格,但我发现的只是db.sessions,他们在其中手动输入了他们想要进行的更改。有没有更好的方法来更新模型?

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    # new class property that I want to add
    address = db.Column(db.String(100), nullable=False)

【问题讨论】:

  • 您是否能够使用下面显示的答案来解决这个问题?如果是这样,请记得accept it。这会向其他用户显示您找到了解决方案。
  • 是的,我能够让它工作。我目前正在和一个朋友一起工作,所以为我们俩设置 flask-migrate 有点困难,但我们最终 gitignored 迁移文件夹。忽略迁移文件夹是否常规。我只是想确保我做对了吗?
  • 不,忽略迁移文件夹绝对是常规的。那应该分享。如果你们中的一个人需要修改数据库模式,请创建一个迁移并将其添加到存储库中。迁移应该在需要的地方“与”代码一起应用。例如,在切换分支时应用迁移。当你回去时,你可能需要扭转它们。 (想一想:如果您忽略迁移文件夹,您和您的朋友如何维护相同的数据库架构?如果您有不同的架构,您应该在生产中使用哪个?)

标签: python database flask sqlalchemy flask-sqlalchemy


【解决方案1】:

这是为什么database migrations 很重要的一个很好的例子。理想情况下,您的所有数据定义都应该使用迁移来完成。

由于您已经在使用 Flask-SQLAlchemy,Flask-Migrate 可能很合适:

  1. Flask-Migrate 添加到项目的依赖项中
  2. 运行 flask db init 为您的项目初始化迁移(这是一项一次性任务)
  3. 更新你的模型(听起来你已经这样做了)
  4. 运行 flask db migrate 以生成迁移文件(这应该仅作为开发迁移的一部分)
  5. 使用flask db upgrade 应用它(这需要在合并新代码时在每个数据库副本上完成,即在每台开发机器上、在暂存中、在生产中等)

【讨论】:

  • 非常感谢。我猜命令“flask db init”中的“db”来自__init__.py。如果是这样,那么我是否在 __init.py__ 目录中运行该命令?
  • flask db 命令应由Flask-SQLAlchemyFlask-Migrate 提供。您可能希望从存储库的根目录运行这些命令。
猜你喜欢
  • 2019-01-26
  • 2015-08-13
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 2017-01-22
  • 1970-01-01
相关资源
最近更新 更多