1 from __future__
import with_statement
2 from alembic
import context
3 from alembic.script
import ScriptDirectory
4 from alembic.operations
import Operations
5 from sqlalchemy
import engine_from_config, pool, MetaData
6 from sqlalchemy.ext.declarative
import declarative_base
7 from logging.config
import fileConfig
12 config = context.config
17 fileConfig(config.config_file_name)
22 meta = 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" 29 Base = declarative_base(metadata=meta)
31 logger = logging.getLogger(
'alembic.runtime.setup')
36 target_metadata =
None 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 engine = engine_from_config(
71 config.get_section(config.config_ini_section),
73 poolclass=pool.NullPool)
75 logger.info(
'Testing for an old alembic_version table.')
77 connection = engine.connect()
79 connection=connection,
80 target_metadata=target_metadata,
81 version_table=
'alembic_version' 84 script_location = config.get_main_option(
'script_location')
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. 128 connection=connection,
129 target_metadata=target_metadata,
130 version_table=
'alembic_version_' + script_location
132 mc = context.get_context()
133 current_db_revision = mc.get_current_revision()
134 if current_db_revision:
136 'Using the alembic_version_%s table at revision %s.',
137 script_location, current_db_revision)
139 logger.info(
'Creating new alembic_version_%s table.',
143 with context.begin_transaction():
144 context.run_migrations()
149 if context.is_offline_mode():
def run_migrations_online()
def run_migrations_offline()