diff options
author | Roman Podolyaka <roman.podolyaka@gmail.com> | 2013-06-15 15:38:02 +0300 |
---|---|---|
committer | Roman Podolyaka <roman.podolyaka@gmail.com> | 2013-06-15 16:54:50 +0300 |
commit | a1ceae2ed3b3996d5b8a554c201cf668d6d17f27 (patch) | |
tree | 29cf8f549a2f756d4c3aa1e00418517fd965199f | |
parent | 9d3e2206363d819ad334d7893c700b861fdc5b57 (diff) | |
download | sqlalchemy-pr/7.tar.gz |
Add AUTOCOMMIT isolation level support for psycopg2pr/7
One can use this to emit statements, which can not be
executed within a transaction (e. g. CREATE DATABASE):
from sqlalchemy import create_engine
eng = create_engine('postgresql://test:test@localhost/test')
conn = eng.connect().execution_options(isolation_level='AUTOCOMMIT')
conn.execute('CREATE DATABASE test2;')
Fixes issue #2072.
-rw-r--r-- | lib/sqlalchemy/dialects/postgresql/psycopg2.py | 1 | ||||
-rw-r--r-- | test/dialect/test_postgresql.py | 10 |
2 files changed, 11 insertions, 0 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2.py b/lib/sqlalchemy/dialects/postgresql/psycopg2.py index fcc1946ff..c7f9f0187 100644 --- a/lib/sqlalchemy/dialects/postgresql/psycopg2.py +++ b/lib/sqlalchemy/dialects/postgresql/psycopg2.py @@ -350,6 +350,7 @@ class PGDialect_psycopg2(PGDialect): def _isolation_lookup(self): extensions = __import__('psycopg2.extensions').extensions return { + 'AUTOCOMMIT': extensions.ISOLATION_LEVEL_AUTOCOMMIT, 'READ COMMITTED': extensions.ISOLATION_LEVEL_READ_COMMITTED, 'READ UNCOMMITTED': extensions.ISOLATION_LEVEL_READ_UNCOMMITTED, 'REPEATABLE READ': extensions.ISOLATION_LEVEL_REPEATABLE_READ, diff --git a/test/dialect/test_postgresql.py b/test/dialect/test_postgresql.py index 00e5c07ab..d1ba960c4 100644 --- a/test/dialect/test_postgresql.py +++ b/test/dialect/test_postgresql.py @@ -1890,6 +1890,16 @@ class MiscTest(fixtures.TestBase, AssertsExecutionResults, AssertsCompiledSQL): c = e.connect() eq_(c.connection.connection.encoding, test_encoding) + @testing.only_on('postgresql+psycopg2', 'psycopg2-specific feature') + @engines.close_open_connections + def test_autocommit_isolation_level(self): + extensions = __import__('psycopg2.extensions').extensions + + c = testing.db.connect() + c = c.execution_options(isolation_level='AUTOCOMMIT') + eq_(c.connection.connection.isolation_level, + extensions.ISOLATION_LEVEL_AUTOCOMMIT) + @testing.fails_on('+zxjdbc', "Can't infer the SQL type to use for an instance " "of org.python.core.PyObjectDerived.") |