env.py (2039B)
1 from logging.config import fileConfig 2 3 from sqlalchemy import engine_from_config 4 from sqlalchemy import pool 5 6 from alembic import context 7 8 # this is the Alembic Config object, which provides 9 # access to the values within the .ini file in use. 10 config = context.config 11 12 # Interpret the config file for Python logging. 13 # This line sets up loggers basically. 14 fileConfig(config.config_file_name) 15 16 # add your model's MetaData object here 17 # for 'autogenerate' support 18 # from myapp import mymodel 19 # target_metadata = mymodel.Base.metadata 20 target_metadata = None 21 22 # other values from the config, defined by the needs of env.py, 23 # can be acquired: 24 # my_important_option = config.get_main_option("my_important_option") 25 # ... etc. 26 27 28 def run_migrations_offline(): 29 """Run migrations in 'offline' mode. 30 31 This configures the context with just a URL 32 and not an Engine, though an Engine is acceptable 33 here as well. By skipping the Engine creation 34 we don't even need a DBAPI to be available. 35 36 Calls to context.execute() here emit the given string to the 37 script output. 38 39 """ 40 url = config.get_main_option("sqlalchemy.url") 41 context.configure( 42 url=url, 43 target_metadata=target_metadata, 44 literal_binds=True, 45 dialect_opts={"paramstyle": "named"}, 46 ) 47 48 with context.begin_transaction(): 49 context.run_migrations() 50 51 52 def run_migrations_online(): 53 """Run migrations in 'online' mode. 54 55 In this scenario we need to create an Engine 56 and associate a connection with the context. 57 58 """ 59 connectable = engine_from_config( 60 config.get_section(config.config_ini_section), 61 prefix="sqlalchemy.", 62 poolclass=pool.NullPool, 63 ) 64 65 with connectable.connect() as connection: 66 context.configure( 67 connection=connection, target_metadata=target_metadata 68 ) 69 70 with context.begin_transaction(): 71 context.run_migrations() 72 73 74 if context.is_offline_mode(): 75 run_migrations_offline() 76 else: 77 run_migrations_online()