63def run_migrations_online():
64 """Run migrations in 'online' mode.
65
66 In this scenario we need to create an Engine
67 and associate a connection with the context.
68
69 """
70 script_location = config.get_main_option('script_location')
71
72 engine = engine_from_config(
73 config.get_section(config.config_ini_section),
74 prefix='sqlalchemy.',
75 poolclass=pool.NullPool)
76
77 logger.info('Testing for an old alembic_version table.')
78
79 with engine.connect() as connection:
80 context.configure(
81 connection=connection,
82 target_metadata=target_metadata
83 )
84
85 found = False
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
91 we're working with.
92 """
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
96 this alembic tree
97 """
98 logger.info(
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,
102 script_location)
103 op = Operations(mc)
104 try:
105 with context.begin_transaction():
106 op.rename_table(
107 'alembic_version', 'alembic_version_%s'
108 % script_location)
109 found = True
110 except:
111 logger.error(('Unable to rename alembic_version to '
112 'alembic_version_%s.'),
113 script_location)
114 connection.close()
115 return
116
117 break
118
119 if not found:
120 logger.info('Didn\'t find an old alembic_version table.')
121 logger.info('Trying alembic_version_%s.' % script_location)
122
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.
126 """
127 with engine.connect() as connection:
128 context.configure(
129 connection=connection,
130 target_metadata=target_metadata,
131 version_table='alembic_version_' + script_location
132 )
133 mc = context.get_context()
134 current_db_revision = mc.get_current_revision()
135 if current_db_revision:
136 logger.info(
137 'Using the alembic_version_%s table at revision %s.',
138 script_location, current_db_revision)
139 else:
140 logger.info('Creating new alembic_version_%s table.',
141 script_location)
142
143 with context.begin_transaction():
144 context.run_migrations()
145
146