SQLAlchemy database migrations for Flask applications using Alembic.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
The Migrate class is the main Flask extension that integrates database migration functionality into Flask applications. It provides the foundation for all migration operations and configuration management.
Main migration manager class that integrates with Flask applications to provide database migration functionality.
class Migrate:
def __init__(self, app=None, db=None, directory='migrations', command='db',
compare_type=True, render_as_batch=True, **kwargs):
"""
Initialize migration manager.
Parameters:
- app: Flask application instance (optional for deferred initialization)
- db: SQLAlchemy database instance (optional for deferred initialization)
- directory: Migration directory path (default: 'migrations')
- command: CLI command name (default: 'db')
- compare_type: Enable type comparison in migrations (default: True)
- render_as_batch: Render operations in batch mode (default: True)
- **kwargs: Additional alembic context arguments
"""Initialize the extension with a Flask application, registering the CLI commands and setting up the migration environment.
def init_app(self, app, db=None, directory=None, command=None,
compare_type=None, render_as_batch=None, **kwargs):
"""
Initialize extension with Flask app.
Parameters:
- app: Flask application instance
- db: SQLAlchemy database instance (optional, uses constructor value if None)
- directory: Migration directory path (optional, uses constructor value if None)
- command: CLI command name (optional, uses constructor value if None)
- compare_type: Enable type comparison (optional, uses constructor value if None)
- render_as_batch: Render operations in batch mode (optional, uses constructor value if None)
- **kwargs: Additional alembic context arguments
"""Register callback functions that will be called to configure the Alembic environment before running migration operations.
def configure(self, f):
"""
Decorator to register configuration callback functions.
Parameters:
- f: Callback function that takes and returns an Alembic Config object
Returns:
The decorated function (for use as decorator)
"""
def call_configure_callbacks(self, config):
"""
Execute all registered configuration callbacks.
Parameters:
- config: Alembic Config object
Returns:
Modified Config object after all callbacks
"""Get an Alembic configuration object with Flask-Migrate specific settings and options applied.
def get_config(self, directory=None, x_arg=None, opts=None):
"""
Get Alembic configuration object.
Parameters:
- directory: Migration directory path (optional, uses instance directory if None)
- x_arg: Additional arguments for env.py scripts (list or single value)
- opts: Options to set on config.cmd_opts (list of option names)
Returns:
Configured Alembic Config object
"""from 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)from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy()
migrate = Migrate()
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db.init_app(app)
migrate.init_app(app, db)
return appfrom flask_migrate import Migrate
migrate = Migrate(
directory='custom_migrations',
command='database',
compare_type=False,
render_as_batch=False
)from flask_migrate import Migrate
migrate = Migrate(app, db)
@migrate.configure
def configure_alembic(config):
# Custom Alembic configuration
config.set_main_option('sqlalchemy.url', 'postgresql://user:pass@localhost/db')
return configInstall with Tessl CLI
npx tessl i tessl/pypi-flask-migrate