SQLAlchemy database migrations for Flask applications using Alembic.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Functions for managing migration revisions, including editing, merging, and stamping operations. These commands provide advanced revision control capabilities for complex migration scenarios.
Edit an existing revision file, useful for making corrections or additions to migration scripts.
def edit(directory=None, revision='current'):
"""
Edit current revision.
Parameters:
- directory: Migration directory path (optional, uses app extension config if None)
- revision: Revision to edit (default: 'current')
Raises:
- RuntimeError: If Alembic version is less than 0.8.0
- CommandError: If editing fails
"""Merge two revisions together, creating a new migration file that resolves branching in the migration history.
def merge(directory=None, revisions='', message=None, branch_label=None,
rev_id=None):
"""
Merge two revisions together, creating a new migration file.
Parameters:
- directory: Migration directory path (optional, uses app extension config if None)
- revisions: Revisions to merge (space-separated string, default: '')
- message: Merge revision message (optional)
- branch_label: Branch label to apply to the new revision (optional)
- rev_id: Hardcoded revision id instead of generating one (optional)
Raises:
- CommandError: If merge fails
- RuntimeError: If Flask application context is not available
"""Mark the revision table with a given revision without running any migrations. Useful for synchronizing the database state with the migration history.
def stamp(directory=None, revision='head', sql=False, tag=None, purge=False):
"""
'stamp' the revision table with the given revision; don't run any migrations.
Parameters:
- directory: Migration directory path (optional, uses app extension config if None)
- revision: Revision to stamp (default: 'head')
- sql: Generate SQL output instead of executing (default: False)
- tag: Arbitrary tag name for custom env.py scripts (optional)
- purge: Delete existing version before stamping (default: False)
Raises:
- CommandError: If stamping fails
- RuntimeError: If Flask application context is not available
"""from flask_migrate import edit
# Edit the current revision
edit()
# Edit a specific revision
edit(revision="abc123def456")from flask_migrate import merge
# Merge two revisions
merge(revisions="abc123 def456", message="Merge feature and bugfix branches")
# Merge with branch label
merge(
revisions="abc123 def456",
message="Merge branches",
branch_label="production"
)from flask_migrate import stamp
# Stamp database as being at head revision
stamp()
# Stamp with specific revision
stamp(revision="abc123def456")
# Generate stamp SQL without executing
stamp(sql=True)
# Purge existing version before stamping
stamp(purge=True)from flask_migrate import stamp, merge
# Synchronize database with migration history after manual changes
stamp(revision="current_actual_state")
# Resolve complex branching scenario
merge(
revisions="branch1_head branch2_head",
message="Resolve parallel development branches",
branch_label="unified"
)from flask_migrate import stamp
# Recovery scenario: mark database as being at a known good state
# without running migrations (useful after manual schema changes)
stamp(revision="known_good_revision", purge=True)Install with Tessl CLI
npx tessl i tessl/pypi-flask-migrate