Introduction Migrations

 Introduction Migrations

Introduction Migrations



What are migrations?

- A migration is a file that keeps track of changes to our database schema (structure of our database).

- Offers version control on our schema.

- Migrations deal with how we manage modifications to our data schema, over time.


Benefits of migrations in our app:

- Mistakes to our database schema are very expensive to make. 

- The entire app can go down, so we want to quickly roll back changes, and test changes before we make them.

- Encapsulate a set of changes to our database schema, made over time.

- Are uniquely named.

- Are usually stored as local files in our project repo, e.g. a migrations/ folder.

- There should be a one-to-one mapping between the changes made to our database, and the migration files that exist in our migrations/ folder.

- Our migrations files set up the tables for our database.

- All changes made to our db should exist physically as part of migration files in our repository.



Upgrades and rollbacks:

- Migrations stack together in order to form the latest version of our database schema.

- We can upgrade our database schema by applying migrations. 

- We can roll back our database schema to a former version by reverting the migrations that we applied. 


Migration command-line scripts:

There are generally 3 scripts needed, for:

- migrate: creating a migration script template to fill out; generating a migration file based on changes to be made

- upgrade: applying migrations that hadn't been applied yet ("upgrading" our database)

- downgrade: rolling back applied migrations that were problematic ("downgrading" our database)


Why use migrations?

Without migrations:

- We do heavy-handed work, creating and recreating the same tables in our database even for minor changes.

- We can lose existing data in older tables we dropped.


With migrations:

- Auto-detects changes from the old version & new version of the SQLAlchemy models. 

- Creates a migration script that resolves differences between the old & new versions. 

- Gives fine-grain control to change existing tables.


This is much better, because:

- We can keep existing schema structures, only modifying what needs to be modified. 

- We can keep existing data.

- We isolate units of change in migration scripts that we can roll back to a “safe” db state. 


Flask-Migrate-cheat-sheet


Flask-Migrate commands:

pip install Flask-Migrate
flask db --help


flask db init 

- Create initial migrations directory structure. 


flask db migrate 

- Detects the model changes to be made and creates a migration file with an upgrade and downgrade logic set up. 

(replaces use of db.create_all()).


flask db upgrade 

- Runs the upgrade command in the migration file, to apply the migration. 


flask db downgrade

- Runs the downgrade command in the migration file, to roll back in migration.  



Comments

Popular posts from this blog

SQLAlchemy library for python

What Is Relational Databases

Free cyber security resources CISA