1from __future__
import with_statement
2from alembic
import context
3from alembic.script
import ScriptDirectory
4from alembic.operations
import Operations
5from sqlalchemy
import engine_from_config, pool, MetaData
6from sqlalchemy.ext.declarative
import declarative_base
7from logging.config
import fileConfig
12config = context.config
17 fileConfig(config.config_file_name)
22meta = MetaData(naming_convention = {
23 "ix":
'ix_%(column_0_label)s',
24 "uq":
"uq_%(table_name)s_%(column_0_name)s",
25 "ck":
"ck_%(table_name)s_%(column_0_name)s_%(constraint_name)s",
26 "fk":
"fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
27 "pk":
"pk_%(table_name)s"
29Base = declarative_base(metadata=meta)
31logger = logging.getLogger(
'alembic.runtime.setup')
46 """Run migrations in 'offline' mode.
48 This configures the context with just a URL
49 and not an Engine, though an Engine
is acceptable
50 here
as well. By skipping the Engine creation
51 we don
't even need a DBAPI to be available.
53 Calls to context.execute() here emit the given string to the
57 url = config.get_main_option("sqlalchemy.url")
58 context.configure(url=url,target_metadata=target_metadata)
60 with context.begin_transaction():
61 context.run_migrations()
64 """Run migrations in 'online' mode.
66 In this scenario we need to create an Engine
67 and associate a connection
with the context.
70 script_location = config.get_main_option('script_location')
72 engine = engine_from_config(
73 config.get_section(config.config_ini_section),
75 poolclass=pool.NullPool)
77 logger.info(
'Testing for an old alembic_version table.')
79 with engine.connect()
as connection:
81 connection=connection,
82 target_metadata=target_metadata
86 mc = context.get_context()
87 current_db_revision = mc.get_current_revision()
88 script = ScriptDirectory.from_config(config)
89 """ If there was an existing alembic_version table, we need to
90 check that it's current revision is in the history for the tree
93 for x
in script.iterate_revisions(
'head',
'base'):
94 if x.revision == current_db_revision:
95 """ An alembic_versions table was found and it belongs to
99 ('An old alembic_version table at revision %s was '
100 'found for %s. Renaming to alembic_version_%s.'),
101 current_db_revision, script_location,
105 with context.begin_transaction():
107 'alembic_version',
'alembic_version_%s'
111 logger.error((
'Unable to rename alembic_version to '
112 'alembic_version_%s.'),
120 logger.info(
'Didn\'t find an old alembic_version table.')
121 logger.info(
'Trying alembic_version_%s.' % script_location)
123 """ We MAY have an alembic_version table that doesn't belong to
124 this tree but if we still don
't have an alembic_version_<tree>
125 table, alembic will create it.
127 with engine.connect()
as connection:
129 connection=connection,
130 target_metadata=target_metadata,
131 version_table=
'alembic_version_' + script_location
133 mc = context.get_context()
134 current_db_revision = mc.get_current_revision()
135 if current_db_revision:
137 'Using the alembic_version_%s table at revision %s.',
138 script_location, current_db_revision)
140 logger.info(
'Creating new alembic_version_%s table.',
143 with context.begin_transaction():
144 context.run_migrations()
147if context.is_offline_mode():
def run_migrations_online()
def run_migrations_offline()