SQLAlchemy database migrations for Flask applications using Alembic.
npx @tessl/cli install tessl/pypi-flask-migrate@4.1.0Flask-Migrate is a Flask extension that handles SQLAlchemy database migrations for Flask applications using Alembic. It provides both a programmatic API and command-line interface for managing database schema changes, creating migration scripts, and applying upgrades/downgrades.
pip install Flask-Migratefrom flask_migrate import MigrateFor individual migration functions:
from flask_migrate import init, revision, migrate, upgrade, downgradefrom flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
# Initialize migration repository
# flask db init
# Generate migration
# flask db migrate -m "Add user table"
# Apply migration
# flask db upgradeFlask-Migrate provides a Flask extension pattern with both programmatic and CLI interfaces:
flask db for command-line usageThe main Flask-Migrate extension class that integrates database migration functionality into Flask applications.
class Migrate:
def __init__(self, app=None, db=None, directory='migrations', command='db',
compare_type=True, render_as_batch=True, **kwargs): ...
def init_app(self, app, db=None, directory=None, command=None,
compare_type=None, render_as_batch=None, **kwargs): ...
def configure(self, f): ...
def get_config(self, directory=None, x_arg=None, opts=None): ...Essential migration commands for creating, applying, and managing database schema changes.
def init(directory=None, multidb=False, template=None, package=False): ...
def revision(directory=None, message=None, autogenerate=False, sql=False,
head='head', splice=False, branch_label=None, version_path=None,
rev_id=None): ...
def migrate(directory=None, message=None, sql=False, head='head', splice=False,
branch_label=None, version_path=None, rev_id=None, x_arg=None): ...
def upgrade(directory=None, revision='head', sql=False, tag=None, x_arg=None): ...
def downgrade(directory=None, revision='-1', sql=False, tag=None, x_arg=None): ...Functions for managing migration revisions, including editing, merging, and stamping operations.
def edit(directory=None, revision='current'): ...
def merge(directory=None, revisions='', message=None, branch_label=None,
rev_id=None): ...
def stamp(directory=None, revision='head', sql=False, tag=None, purge=False): ...Functions for inspecting migration history, current state, and repository status.
def show(directory=None, revision='head'): ...
def history(directory=None, rev_range=None, verbose=False,
indicate_current=False): ...
def heads(directory=None, verbose=False, resolve_dependencies=False): ...
def branches(directory=None, verbose=False): ...
def current(directory=None, verbose=False): ...
def check(directory=None): ...
def list_templates(): ...Flask CLI integration that provides command-line access to all migration functionality through the flask db command group.
@click.group()
def db(directory, x_arg): ...class Config(AlembicConfig):
"""Extended Alembic configuration with template directory support."""
def __init__(self, *args, template_directory=None, **kwargs): ...
def get_template_directory(self): ...
class _MigrateConfig:
"""Configuration wrapper for backwards compatibility."""
def __init__(self, migrate, db, **kwargs): ...
@property
def metadata(self): ...def catch_errors(f):
"""Decorator that catches CommandError and RuntimeError exceptions."""Flask-Migrate functions raise CommandError or RuntimeError for migration failures. The catch_errors decorator is used internally to handle these exceptions gracefully in CLI usage.