【问题标题】:How to add property to PostgreSQL database that is hosted on Heroku with Flask/Python?如何使用 Flask/Python 向 Heroku 上托管的 PostgreSQL 数据库添加属性?
【发布时间】:2022-11-06 08:05:13
【问题描述】:

我有一个托管在 Heroku 上并使用 Flask 和 Python 的网站数据库。模型结构如下:

class MyDataModel(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    property1 = db.Column(db.String(240), default = "")
    property2 = db.Column(db.String(240), default = "")
    property3 = db.Column(db.String(240), default = "")

当我尝试将此模型更新为具有下面显示的附加属性 (property4) 的东西时,该网站无法正常工作。有没有办法向模型添加附加属性,以便模型仍然正常运行?

class MyDataModel(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    property1 = db.Column(db.String(240), default = "")
    property2 = db.Column(db.String(240), default = "")
    property3 = db.Column(db.String(240), default = "")
    property4 = db.Column(db.String(240), default = "")

数据库设置如下:

db = SQLAlchemy()
app = Flask(__name__)
db.init_app(app)

【问题讨论】:

  • db.Model 是什么?你在使用数据库迁移吗?如何将属性添加到您的当地的数据库?
  • 你得到什么错误?

标签: python postgresql flask heroku heroku-postgres


【解决方案1】:

SQLAlchemy 允许您根据您的模型自动创建数据库结构。但是如果表已经在数据库中,这个函数不会更新表。这是默认的 SQLAlchemy 行为。

要根据模型更新表结构,您需要使用像 Alembic 这样的迁移库进行迁移。您可以在此处找到有关 Flask 应用程序的 SQLAlchemy 数据库迁移的说明和详细信息: https://flask-migrate.readthedocs.io/en/latest/

【讨论】:

    【解决方案2】:

    flask中的数据库迁移需要自行设置。

    创建一个manage.py 文件,

    import os
    from flask_script import Manager
    from flask_migrate import Migrate, MigrateCommand
    
    from app import app, db
    
    
    app.config.from_object(os.environ['APP_SETTINGS'])
    
    migrate = Migrate(app, db)
    manager = Manager(app)
    
    manager.add_command('db', MigrateCommand)
    
    if __name__ == '__main__':
        manager.run()
    

    要启动数据库,您需要运行此命令,

    $ python manage.py db init
    

    运行数据库初始化后,您将在项目中看到一个名为“migrations”的新文件夹。

    对于迁移,

    $ python manage.py db migrate
    

    要在数据库中申请,

    $ python manage.py db upgrade
    

    由于您使用的是 Heroku,因此 Heroku 中的命令会有所不同。

    Reference

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 2019-09-15
      • 2020-10-20
      • 2020-08-05
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      相关资源
      最近更新 更多