def setup(alembic_ini="schema-migration.ini"): """Setup all SQLAlchemy sessions and connections :param db_url: The database URL as required by SQLAlchemy :param alembic_ini: Alembic config file :return: None """ alembic_conf = Config(alembic_ini) db_url = alembic_conf.get_section_option("alembic", "sqlalchemy.url") print(db_url) if not db_url: db_url = os.getenv("PG_DB_URL") if not db_url: raise RuntimeError( "The db_url is not in the kwarg nor in the alembic_ini file.") sqlalchemy_db_url = sa.engine.url.make_url(db_url) print("-" * 50) msg = ( "Connecting to '%s' database on %s server at '%s'" % (sqlalchemy_db_url.database, sqlalchemy_db_url.get_dialect().name.upper(), sqlalchemy_db_url.host)) print(msg) engine = create_engine(db_url) Base.metadata.bind = engine # Base.metadata.bind.echo = True # Log the SQL interaction. msg = (engine.execute("select 'Connected to %s database'" % sqlalchemy_db_url.database).scalar()) print(msg) msg = ("Established connection to '%s' database" % sqlalchemy_db_url.database) print(msg) print("-" * 50) print("Starting Alembic upgrade database to latest version") command.upgrade(alembic_conf, "head", tag=db_url) print("Completed running Alembic command") print("-" * 50)
def setup(alembic_ini="schema_migration.ini"): """Setup all SQLAlchemy sessions and connections :param db_url: The database URL as required by SQLAlchemy :param alembic_ini: Alembic config file :return: None """ alembic_conf = Config(alembic_ini) db_url = alembic_conf.get_section_option("alembic", "sqlalchemy.url") if not db_url: db_url = os.getenv("PG_DB_URL") if not db_url: raise RuntimeError("The db_url is not in the kwarg " "nor in the alembic_ini file.") sqlalchemy_db_url = sa.engine.url.make_url(db_url) print("-" * 50) msg = ("Connecting to '%s' database on %s server at '%s'" % ( sqlalchemy_db_url.database, sqlalchemy_db_url.get_dialect().name.upper(), sqlalchemy_db_url.host)) print(msg) engine = create_engine(db_url) Base.metadata.bind = engine # Base.metadata.bind.echo = True # Log the SQL interaction. msg = (engine.execute("select 'Connected to %s database'" % sqlalchemy_db_url.database).scalar()) print(msg) msg = ("Established connection to '%s' database" % sqlalchemy_db_url.database) print(msg) print("-" * 50) print("Starting Alembic upgrade database to latest version") command.upgrade(alembic_conf, "head", tag=db_url) print("Completed running Alembic command") print("-" * 50)
from tortoise import Tortoise from alembic.config import Config import config __alembic_cfg = Config(config.application_root.joinpath("alembic.ini")) __db_dns = __alembic_cfg.get_section_option(config.env, 'sqlalchemy.url') async def init(): # Here we create a SQLite DB using file "db.sqlite3" # also specify the app name of "models" # which contain models from "app.models" await Tortoise.init( db_url=__db_dns, modules={'models': ['models']} ) # Generate the schema #await Tortoise.generate_schemas()
class LowLevelApi: def __init__(self): """ Load necessary alembic objects such ans Script and Context """ if not config.alembic_dir: raise ValueError('Please setup config.alembic_dir param') # loading alembic.ini config from installed path self.init_config = Config(config.alembic_dir + 'alembic.ini') # create database connection self.engine = create_engine(self.__database_url__) self.conn = self.engine.connect() # and load Alembic Context self.context = MigrationContext.configure(self.conn) @property def script(self): """ Get ScripDirectory :return: ScripDirectory Object based on config.alembic_dir """ if not os.path.exists(config.alembic_dir): raise Exception('Dir {} not found'.format(config.alembic_dir)) return ScriptDirectory.from_config(self.init_config) @property def __database_url__(self): """ Get DatabaseUrl example: postgresql+psycopg2://postgres:postgres@localhost:5432/alembic :return: database url """ return config.database_url or self.init_config.get_section_option( 'alembic', 'sqlalchemy.url') @__database_url__.setter def __database_url__(self, db_url): """ Set sqlalchemy.url in alembic.ini :param db_url: database url """ self.init_config.set_section_option('alembic', 'sqlalchemy.url', db_url) def __get_last_revision__(self): """ Get last revision :return: revision object ot None if migration does not exist """ revisions = [revision for revision in self.script.walk_revisions()] if revisions: if len(revisions) == 1: return revisions[0] return revisions[:-1][0] return None @staticmethod def __get_git_branch__(): """ Get current git branch :return: current git branch """ from git import Repo return str(Repo('').active_branch) def __set_branch_to_script__(self): """ Write into migration current git branch name """ self.init_config.__setattr__('git_branch', self.__get_git_branch__()) @staticmethod def __merge_choices__(revision_heads): """ Return merge choices of merge sequence :param revision_heads: name of heads :return: list of available merges """ inc = 0 for rev_1 in revision_heads: for rev_2 in revision_heads: if rev_1 != rev_2: inc += 1 yield dict(inc=inc, migration1=rev_1, migration2=rev_2) @staticmethod def __branch_name__(revision): """ Git branch name of specific migration (Revision) :param revision: Revision object (migration) :return: git branch name """ branch = 'no branch' if hasattr(revision.module, 'git_branch'): branch = revision.module.git_branch return branch