Skip to content

Commit 3e1a530

Browse files
author
Matt George
committed
use commit level lookup, because this seems to work
1 parent 33df3a1 commit 3e1a530

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

redshift_sqlalchemy/dialect.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from sqlalchemy.dialects.postgresql.psycopg2 import PGDialect_psycopg2
22
from sqlalchemy.engine import reflection
3+
from sqlalchemy import util, exc
34

45
class RedshiftDialect(PGDialect_psycopg2):
56
@reflection.cache
@@ -16,7 +17,29 @@ def get_indexes(self, connection, table_name, schema, **kw):
1617
"""
1718
return []
1819

20+
#def set_isolation_level(self, connection, level):
21+
# from psycopg2 import extensions
22+
# connection.set_isolation_level(extensions.ISOLATION_LEVEL_AUTOCOMMIT)
23+
24+
@util.memoized_property
25+
def _isolation_lookup(self):
26+
extensions = __import__('psycopg2.extensions').extensions
27+
return {
28+
'READ COMMITTED': extensions.ISOLATION_LEVEL_READ_COMMITTED,
29+
'READ UNCOMMITTED': extensions.ISOLATION_LEVEL_READ_UNCOMMITTED,
30+
'REPEATABLE READ': extensions.ISOLATION_LEVEL_REPEATABLE_READ,
31+
'SERIALIZABLE': extensions.ISOLATION_LEVEL_SERIALIZABLE,
32+
'AUTOCOMMIT': extensions.ISOLATION_LEVEL_AUTOCOMMIT
33+
}
34+
1935
def set_isolation_level(self, connection, level):
20-
from psycopg2 import extensions
21-
connection.set_isolation_level(extensions.ISOLATION_LEVEL_AUTOCOMMIT)
36+
try:
37+
level = self._isolation_lookup[level.replace('_', ' ')]
38+
except KeyError:
39+
raise exc.ArgumentError(
40+
"Invalid value '%s' for isolation_level. "
41+
"Valid isolation levels for %s are %s" %
42+
(level, self.name, ", ".join(self._isolation_lookup))
43+
)
2244

45+
connection.set_isolation_level(level)

0 commit comments

Comments
 (0)