コード例 #1
0
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)
コード例 #2
0
ファイル: models.py プロジェクト: htquach/gemeter
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)
コード例 #3
0
ファイル: db.py プロジェクト: slavestys/chat_server
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()
コード例 #4
0
ファイル: alembic_wrapper.py プロジェクト: symstu/git-alembic
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