如何使用Flask/Python将属性添加到托管在Heroku上的PostgreSQL数据库



我的网站有一个数据库,托管在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)

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

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

对于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中的命令将有所不同。

参考

最新更新