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
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
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
def test_misc(): assert quoted_identifier("hi") == '"hi"' assert quoted_identifier('he"llo') == '"he""llo"'