I have as SQLAlchemy model called User
and I want to add another property to the class, ex: address
.
I tried adding a new class property, and hoped that SQLAlchemy would realize there is a change in the class and would update the table automatically. That is not case.
I've looked online on how to make changes to the model which would then update the table automatically, but all I have found is db.sessions
where they manually type out the changes they want to make. Is there a better way to update a model?
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)
This is a great example of why database migrations are important. Ideally, all of your data definition should be done using migrations.
Since you're already using Flask-SQLAlchemy, Flask-Migrate is probably a good fit:
Add Flask-Migrate
to your project's dependencies.
Run flask db init
to initialize migrations for your project (this is a one-time task).
Update your model (it sounds like you've already done this).
Run flask db migrate
to generate a migration file (this should be done only as part of developing migrations).
Review and, if necessary, edit the generated migration files to ensure that they capture the necessary changes. These files should be committed to your repository.
Apply it with flask db upgrade
(this will need to be done on each copy of the database when the new code is merged, i.e. on each development machine, in staging, in production, etc.)