From b38fb59fe484d6e4e5992c9b2dc9b9f7724f016a Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 3 Mar 2023 09:30:58 -0500 Subject: audition pymssql once more; retire sane_rowcount_returning pymssql seems to be maintained again and seems to be working completely, so let's try re-enabling it. Fixed issue in the new :class:`.Uuid` datatype which prevented it from working with the pymssql driver. As pymssql seems to be maintained again, restored testing support for pymssql. Tweaked the pymssql dialect to take better advantage of RETURNING for INSERT statements in order to retrieve last inserted primary key values, in the same way as occurs for the mssql+pyodbc dialect right now. Identified that the ``sqlite`` and ``mssql+pyodbc`` dialects are now compatible with the SQLAlchemy ORM's "versioned rows" feature, since SQLAlchemy now computes rowcount for a RETURNING statement in this specific case by counting the rows returned, rather than relying upon ``cursor.rowcount``. In particular, the ORM versioned rows use case (documented at :ref:`mapper_version_counter`) should now be fully supported with the SQL Server pyodbc dialect. Change-Id: I38a0666587212327aecf8f98e86031ab25d1f14d References: #5321 Fixes: #9414 --- lib/sqlalchemy/orm/persistence.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) (limited to 'lib/sqlalchemy/orm') diff --git a/lib/sqlalchemy/orm/persistence.py b/lib/sqlalchemy/orm/persistence.py index b8368001b..a331d4ed8 100644 --- a/lib/sqlalchemy/orm/persistence.py +++ b/lib/sqlalchemy/orm/persistence.py @@ -805,11 +805,7 @@ def _emit_update_statements( statement = statement.return_defaults(mapper.version_id_col) return_defaults = True - assert_singlerow = ( - connection.dialect.supports_sane_rowcount - if not return_defaults - else connection.dialect.supports_sane_rowcount_returning - ) + assert_singlerow = connection.dialect.supports_sane_rowcount assert_multirow = ( assert_singlerow @@ -1274,9 +1270,6 @@ def _emit_post_update_statements( if mapper._version_id_has_server_side_value: statement = statement.return_defaults(mapper.version_id_col) - return_defaults = True - else: - return_defaults = False # execute each UPDATE in the order according to the original # list of states to guarantee row access order, but @@ -1291,11 +1284,7 @@ def _emit_post_update_statements( records = list(records) connection = key[0] - assert_singlerow = ( - connection.dialect.supports_sane_rowcount - if not return_defaults - else connection.dialect.supports_sane_rowcount_returning - ) + assert_singlerow = connection.dialect.supports_sane_rowcount assert_multirow = ( assert_singlerow and connection.dialect.supports_sane_multi_rowcount -- cgit v1.2.1