我的网站有一个数据库,托管在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中的命令将有所不同。
参考