[Sqlalchemy-tickets] Issue #3622: Result rowcount returns -1 on UPDATE with version 1.0+ (zzzeek/sq
Brought to you by:
zzzeek
|
From: Tuomas M. <iss...@bi...> - 2016-01-05 07:37:55
|
New issue 3622: Result rowcount returns -1 on UPDATE with version 1.0+ https://bitbucket.org/zzzeek/sqlalchemy/issues/3622/result-rowcount-returns-1-on-update-with Tuomas Mursu: Releases 0.9.7 and 1.0.11 seem to have some differences in returned rowcount when doing an update. Simple example: ``` #!python import logging logging.basicConfig(level=logging.INFO) log = logging.getLogger() logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) from sqlalchemy import create_engine, text engine = create_engine('mssql+pyodbc://mydsn') with engine.connect() as cnx: query = text('''UPDATE FOOTABLE SET DESCRIPTION='asd' WHERE ID=123''') result = cnx.execute(query) log.info('supports_sane_multi_rowcount: {0}'.format(result.supports_sane_multi_rowcount())) log.info('supports_sane_rowcount: {0}'.format(result.supports_sane_rowcount())) log.info('Update rowcount: {0}'.format(result.rowcount)) ``` Log output on 0.9.7: ``` #! INFO:sqlalchemy.engine.base.Engine: SELECT default_schema_name FROM sys.database_principals WHERE principal_id=database_principal_id() INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:UPDATE FOOTABLE SET DESCRIPTION='asd' WHERE ID=123 INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT INFO:root:supports_sane_multi_rowcount: False INFO:root:supports_sane_rowcount: True INFO:root:Update rowcount: 1 ``` Log output on 1.0.11: ``` #! INFO:sqlalchemy.engine.base.Engine: SELECT default_schema_name FROM sys.database_principals WHERE principal_id=database_principal_id() INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:UPDATE FOOTABLE SET DESCRIPTION='asd' WHERE ID=123 INFO:sqlalchemy.engine.base.Engine:() INFO:sqlalchemy.engine.base.Engine:COMMIT INFO:root:supports_sane_multi_rowcount: False INFO:root:supports_sane_rowcount: True INFO:root:Update rowcount: -1 ``` The database row does exist and the update still actually works, but I'd need the count returned. I'm using Windows 10, pyodbc 3.0.10, Python 3.3, everything 64-bit. |