]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Implement AUTOCOMMIT for pyodbc, pymssql
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 29 Aug 2017 18:31:43 +0000 (14:31 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 29 Aug 2017 18:32:35 +0000 (14:32 -0400)
In prep for CI coverage for SQL Server, allow AUTOCOMMIT
isolation level to work

Change-Id: I850b977e75f53385986f2c181be4e4412dd3b3f4

doc/build/changelog/migration_12.rst
doc/build/changelog/unreleased_12/sql_server_isolation.rst [new file with mode: 0644]
lib/sqlalchemy/connectors/pyodbc.py
lib/sqlalchemy/dialects/mssql/base.py
lib/sqlalchemy/dialects/mssql/pymssql.py
test/requirements.py

index 14e61a04e3261392d37453ad1fc311e5ca29c815..36b2819fa978a253b58c44e964e24ec5954425c6 100644 (file)
@@ -1406,3 +1406,10 @@ as the "owner".
     :ref:`multipart_schema_names`
 
 :ticket:`2626`
+
+AUTOCOMMIT isolation level support
+----------------------------------
+
+Both the PyODBC and pymssql dialects now support the "AUTOCOMMIT" isolation
+level as set by :meth:`.Connection.execution_options` which will establish
+the correct flags on the DBAPI connection object.
diff --git a/doc/build/changelog/unreleased_12/sql_server_isolation.rst b/doc/build/changelog/unreleased_12/sql_server_isolation.rst
new file mode 100644 (file)
index 0000000..47f4831
--- /dev/null
@@ -0,0 +1,8 @@
+.. change::
+    :tags: feature, mssql
+
+    Added support for "AUTOCOMMIT" isolation level, as established
+    via :meth:`.Connection.execution_options`, to the
+    PyODBC and pymssql dialects.   This isolation level sets the
+    appropriate DBAPI-specific flags on the underlying
+    connection object.
\ No newline at end of file
index ee8445dae4136216b07182ccefe451e5c5bec0a1..65fe37212e0abfedcd7f525625a57dc74220f02e 100644 (file)
@@ -194,3 +194,17 @@ class PyODBCConnector(Connector):
             except ValueError:
                 version.append(n)
         return tuple(version)
+
+    def set_isolation_level(self, connection, level):
+        # adjust for ConnectionFairy being present
+        # allows attribute set e.g. "connection.autocommit = True"
+        # to work properly
+        if hasattr(connection, 'connection'):
+            connection = connection.connection
+
+        if level == 'AUTOCOMMIT':
+            connection.autocommit = True
+        else:
+            connection.autocommit = False
+            super(PyODBCConnector, self).set_isolation_level(connection,
+                                                             level)
index 00c43bba6a65a7ae6eb803362665a6db5c68a81a..05381d671ea8a5130f0b7a0056e678638f82f805 100644 (file)
@@ -250,6 +250,7 @@ To set using per-connection execution options::
 
 Valid values for ``isolation_level`` include:
 
+* ``AUTOCOMMIT`` - pyodbc / pymssql-specific
 * ``READ COMMITTED``
 * ``READ UNCOMMITTED``
 * ``REPEATABLE READ``
@@ -259,6 +260,7 @@ Valid values for ``isolation_level`` include:
 .. versionadded:: 1.1 support for isolation level setting on Microsoft
    SQL Server.
 
+.. versionadded:: 1.2 added AUTOCOMMIT isolation level setting
 
 Nullability
 -----------
index 57ca8ab3d44b0d4f9b3410f26090ff02ebe6f09b..cd800471d46e98c9bb37d7998500cceda7b344de 100644 (file)
@@ -94,4 +94,12 @@ class MSDialect_pymssql(MSDialect):
         else:
             return False
 
+    def set_isolation_level(self, connection, level):
+        if level == 'AUTOCOMMIT':
+            connection.autocommit(True)
+        else:
+            connection.autocommit(False)
+            super(MSDialect_pymssql, self).set_isolation_level(connection,
+                                                                level)
+
 dialect = MSDialect_pymssql
index 4fcf541e31ac729c5886ccdef3e4a9c0a0e28be4..4f01eac9bcd3e3077ad98f8c4eaa575dc356a866 100644 (file)
@@ -268,7 +268,7 @@ class DefaultRequirements(SuiteRequirements):
     def autocommit(self):
         """target dialect supports 'AUTOCOMMIT' as an isolation_level"""
         return only_on(
-            ('postgresql', 'mysql'),
+            ('postgresql', 'mysql', 'mssql+pyodbc', 'mssql+pymssql'),
             "dialect does not support AUTOCOMMIT isolation mode")
 
     @property