From eb53f7b31ea994cd17665ff31aef38f96d12cbde Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Mon, 4 Nov 2013 14:26:46 -0800 Subject: [PATCH] Ensure isolation level is autocommit for postgres. --- sqlalchemy_utils/functions/database.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sqlalchemy_utils/functions/database.py b/sqlalchemy_utils/functions/database.py index 890eace..cf94740 100644 --- a/sqlalchemy_utils/functions/database.py +++ b/sqlalchemy_utils/functions/database.py @@ -52,6 +52,11 @@ def create_database(url, encoding='utf8'): engine = sa.create_engine(url) if engine.dialect.name == 'postgresql': + if engine.driver == 'psycopg2': + from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT + engine.raw_connection().set_isolation_level( + ISOLATION_LEVEL_AUTOCOMMIT) + text = "CREATE DATABASE %s ENCODING = '%s'" % (database, encoding) engine.execute(text) @@ -82,6 +87,12 @@ def drop_database(url): if engine.dialect.name == 'sqlite' and url.database != ':memory:': os.remove(url.database) + elif engine.dialect.name == 'postgresql' and engine.driver == 'psycopg2': + from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT + engine.raw_connection().set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) + text = "DROP DATABASE %s" % database + engine.execute(text) + else: text = "DROP DATABASE %s" % database engine.execute(text)