Example #1
0
def drop_database(db_url):
    url = make_url(db_url)

    dbtype = url.get_dialect().name
    name = url.database

    if database_exists(url):
        if dbtype == "sqlite":
            if name and name != ":memory:":
                os.remove(name)
                return True
            else:
                return False
        else:
            with admin_db_connection(url) as c:
                if dbtype == "postgresql":

                    REVOKE = "revoke connect on database {} from public"
                    revoke = REVOKE.format(quoted_identifier(name))
                    c.execute(revoke)

                kill_other_connections(c, name, hardkill=True)

                c.execute("""
                    drop database if exists {};
                """.format(quoted_identifier(name)))
            return True
    else:
        return False
Example #2
0
def create_database(db_url, template=None, wipe_if_existing=False):
    target_url = make_url(db_url)
    dbtype = target_url.get_dialect().name

    if wipe_if_existing:
        drop_database(db_url)

    if database_exists(target_url):
        return False
    else:

        if dbtype == "sqlite":
            can_select(target_url)
            return True

        with admin_db_connection(target_url) as c:
            if template:
                t = "template {}".format(quoted_identifier(template))
            else:
                t = ""

            c.execute("""
                create database {} {};
            """.format(quoted_identifier(target_url.database), t))
        return True
Example #3
0
def drop_database(db_url):
    url = copy_url(db_url)

    dbtype = url.get_dialect().name
    name = url.database

    if database_exists(url):
        if dbtype == "sqlite":
            if name and name != ":memory:":
                os.remove(name)
                return True
            else:
                return False
        else:
            with admin_db_connection(url) as c:
                if dbtype == "postgresql":

                    REVOKE = "revoke connect on database {} from public"
                    revoke = REVOKE.format(quoted_identifier(name))
                    c.execute(revoke)
                    kill_other_connections(c, name, hardkill=True)
                    c.execute("""
                        drop database if exists {};
                    """.format(quoted_identifier(name)))
                elif dbtype == "redshift":
                    revoke = """
                        select pg_terminate_backend(procpid)
                        from pg_stat_activity where datname='{}'
                    """.format(name)
                    c.execute(revoke)
                    # There's no IF EXISTS in Redshift
                    c.execute("""
                        drop database {};
                    """.format(quoted_identifier(name)))
            return True
    else:
        return False
Example #4
0
def test_misc():
    assert quoted_identifier("hi") == '"hi"'
    assert quoted_identifier('he"llo') == '"he""llo"'