DDL Internals
These are some of the constructs used to generate migration
instructions. The APIs here build off of the sqlalchemy.schema.DDLElement
and sqlalchemy.ext.compiler_toplevel systems.
For programmatic usage of Alembic’s migration directives, the easiest
route is to use the higher level functions given by Operation Directives.
-
class alembic.ddl.base.AddColumn(name, column, schema=None)
-
class alembic.ddl.base.AlterColumn(name, column_name, schema=None, existing_type=None, existing_nullable=None, existing_server_default=None)
-
class alembic.ddl.base.AlterTable(table_name, schema=None)
Represent an ALTER TABLE statement.
Only the string name and optional schema name of the table
is required, not a full Table object.
-
class alembic.ddl.base.ColumnDefault(name, column_name, default, **kw)
-
class alembic.ddl.base.ColumnName(name, column_name, newname, **kw)
-
class alembic.ddl.base.ColumnNullable(name, column_name, nullable, **kw)
-
class alembic.ddl.base.ColumnType(name, column_name, type_, **kw)
-
class alembic.ddl.base.DropColumn(name, column, schema=None)
-
class alembic.ddl.base.RenameTable(old_table_name, new_table_name, schema=None)
-
alembic.ddl.base.add_column(compiler, column, **kw)
-
alembic.ddl.base.alter_column(compiler, name)
-
alembic.ddl.base.alter_table(compiler, name, schema)
-
alembic.ddl.base.drop_column(compiler, name)
-
alembic.ddl.base.format_column_name(compiler, name)
-
alembic.ddl.base.format_server_default(compiler, default)
-
alembic.ddl.base.format_table_name(compiler, name, schema)
-
alembic.ddl.base.format_type(compiler, type_)
-
alembic.ddl.base.quote_dotted(name, quote)
quote the elements of a dotted name
-
alembic.ddl.base.visit_add_column(element, compiler, **kw)
-
alembic.ddl.base.visit_column_default(element, compiler, **kw)
-
alembic.ddl.base.visit_column_name(element, compiler, **kw)
-
alembic.ddl.base.visit_column_nullable(element, compiler, **kw)
-
alembic.ddl.base.visit_column_type(element, compiler, **kw)
-
alembic.ddl.base.visit_drop_column(element, compiler, **kw)
-
alembic.ddl.base.visit_rename_table(element, compiler, **kw)
-
class alembic.ddl.impl.DefaultImpl(dialect, connection, as_sql, transactional_ddl, output_buffer, context_opts)
Provide the entrypoint for major migration operations,
including database-specific behavioral variances.
While individual SQL/DDL constructs already provide
for database-specific implementations, variances here
allow for entirely different sequences of operations
to take place for a particular migration, such as
SQL Server’s special ‘IDENTITY INSERT’ step for
bulk inserts.
-
add_column(table_name, column, schema=None)
-
add_constraint(const)
-
alter_column(table_name, column_name, nullable=None, server_default=False, name=None, type_=None, schema=None, autoincrement=None, existing_type=None, existing_server_default=None, existing_nullable=None, existing_autoincrement=None)
-
autogen_column_reflect(inspector, table, column_info)
A hook that is attached to the ‘column_reflect’ event for when
a Table is reflected from the database during the autogenerate
process.
Dialects can elect to modify the information gathered here.
-
bind
-
bulk_insert(table, rows, multiinsert=True)
-
command_terminator = ';'
-
compare_server_default(inspector_column, metadata_column, rendered_metadata_default, rendered_inspector_default)
-
compare_type(inspector_column, metadata_column)
-
correct_for_autogen_constraints(conn_uniques, conn_indexes, metadata_unique_constraints, metadata_indexes)
-
correct_for_autogen_foreignkeys(conn_fks, metadata_fks)
-
create_index(index)
-
create_table(table)
-
drop_column(table_name, column, schema=None, **kw)
-
drop_constraint(const)
-
drop_index(index)
-
drop_table(table)
-
emit_begin()
Emit the string BEGIN, or the backend-specific
equivalent, on the current connection context.
This is used in offline mode and typically
via EnvironmentContext.begin_transaction().
-
emit_commit()
Emit the string COMMIT, or the backend-specific
equivalent, on the current connection context.
This is used in offline mode and typically
via EnvironmentContext.begin_transaction().
-
execute(sql, execution_options=None)
-
classmethod get_by_dialect(dialect)
-
prep_table_for_batch(table)
perform any operations needed on a table before a new
one is created to replace it in batch mode.
the PG dialect uses this to drop constraints on the table
before the new one uses those same names.
-
rename_table(old_table_name, new_table_name, schema=None)
-
requires_recreate_in_batch(batch_op)
Return True if the given BatchOperationsImpl
would need the table to be recreated and copied in order to
proceed.
Normally, only returns True on SQLite when operations other
than add_column are present.
-
start_migrations()
A hook called when EnvironmentContext.run_migrations()
is called.
Implementations can set up per-migration-run state here.
-
static_output(text)
-
transactional_ddl = False
-
class alembic.ddl.impl.ImplMeta(classname, bases, dict_)
MySQL
-
class alembic.ddl.mysql.MySQLAlterDefault(name, column_name, default, schema=None)
Bases: alembic.ddl.base.AlterColumn
-
class alembic.ddl.mysql.MySQLChangeColumn(name, column_name, schema=None, newname=None, type_=None, nullable=None, default=False, autoincrement=None)
Bases: alembic.ddl.base.AlterColumn
-
class alembic.ddl.mysql.MySQLImpl(dialect, connection, as_sql, transactional_ddl, output_buffer, context_opts)
Bases: alembic.ddl.impl.DefaultImpl
-
alter_column(table_name, column_name, nullable=None, server_default=False, name=None, type_=None, schema=None, existing_type=None, existing_server_default=None, existing_nullable=None, autoincrement=None, existing_autoincrement=None, **kw)
-
compare_server_default(inspector_column, metadata_column, rendered_metadata_default, rendered_inspector_default)
-
correct_for_autogen_constraints(conn_unique_constraints, conn_indexes, metadata_unique_constraints, metadata_indexes)
-
correct_for_autogen_foreignkeys(conn_fks, metadata_fks)
-
drop_constraint(const)
-
transactional_ddl = False
-
class alembic.ddl.mysql.MySQLModifyColumn(name, column_name, schema=None, newname=None, type_=None, nullable=None, default=False, autoincrement=None)
Bases: alembic.ddl.mysql.MySQLChangeColumn
MS-SQL
-
class alembic.ddl.mssql.MSSQLImpl(*arg, **kw)
Bases: alembic.ddl.impl.DefaultImpl
-
alter_column(table_name, column_name, nullable=None, server_default=False, name=None, type_=None, schema=None, existing_type=None, existing_server_default=None, existing_nullable=None, **kw)
-
batch_separator = 'GO'
-
bulk_insert(table, rows, **kw)
-
drop_column(table_name, column, **kw)
-
emit_begin()
-
emit_commit()
-
transactional_ddl = True
-
alembic.ddl.mssql.mssql_add_column(compiler, column, **kw)
-
alembic.ddl.mssql.visit_add_column(element, compiler, **kw)
-
alembic.ddl.mssql.visit_column_default(element, compiler, **kw)
-
alembic.ddl.mssql.visit_column_nullable(element, compiler, **kw)
-
alembic.ddl.mssql.visit_column_type(element, compiler, **kw)
-
alembic.ddl.mssql.visit_rename_column(element, compiler, **kw)
-
alembic.ddl.mssql.visit_rename_table(element, compiler, **kw)
Postgresql
-
class alembic.ddl.postgresql.PostgresqlImpl(dialect, connection, as_sql, transactional_ddl, output_buffer, context_opts)
Bases: alembic.ddl.impl.DefaultImpl
-
autogen_column_reflect(inspector, table, column_info)
-
compare_server_default(inspector_column, metadata_column, rendered_metadata_default, rendered_inspector_default)
-
correct_for_autogen_constraints(conn_unique_constraints, conn_indexes, metadata_unique_constraints, metadata_indexes)
-
prep_table_for_batch(table)
-
transactional_ddl = True
-
alembic.ddl.postgresql.visit_rename_table(element, compiler, **kw)
SQLite
-
class alembic.ddl.sqlite.SQLiteImpl(dialect, connection, as_sql, transactional_ddl, output_buffer, context_opts)
Bases: alembic.ddl.impl.DefaultImpl
-
add_constraint(const)
-
compare_server_default(inspector_column, metadata_column, rendered_metadata_default, rendered_inspector_default)
-
correct_for_autogen_constraints(conn_unique_constraints, conn_indexes, metadata_unique_constraints, metadata_indexes)
-
drop_constraint(const)
-
requires_recreate_in_batch(batch_op)
Return True if the given BatchOperationsImpl
would need the table to be recreated and copied in order to
proceed.
Normally, only returns True on SQLite when operations other
than add_column are present.
-
transactional_ddl = False
SQLite supports transactional DDL, but pysqlite does not:
see: http://bugs.python.org/issue10740