- changed status to invalid
MSSQL merge errors with cannot update identity
Issue #3731
invalid
If I try to merge an item in sqlalchemy using a mssql db it errors saying
item = Item(id=1)
session.merge(item)
File "/usr/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2659, in first
ret = list(self[0:1])
File "/usr/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2457, in __getitem__
return list(res)
File "/usr/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2761, in __iter__
return self._execute_and_instances(context)
File "/usr/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2774, in _execute_and_instances
close_with_result=True)
File "/usr/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2765, in _connection_from_session
**kw)
File "/usr/lib/python3.5/site-packages/sqlalchemy/orm/session.py", line 893, in connection
execution_options=execution_options)
File "/usr/lib/python3.5/site-packages/sqlalchemy/orm/session.py", line 898, in _connection_for_bind
engine, execution_options)
File "/usr/lib/python3.5/site-packages/sqlalchemy/orm/session.py", line 313, in _connection_for_bind
self._assert_active()
File "/usr/lib/python3.5/site-packages/sqlalchemy/orm/session.py", line 214, in _assert_active
% self._rollback_exception
sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (pyodbc.ProgrammingError) ('42000', "[42000] [FreeTDS][SQL Server]Cannot update identity column 'id'. (8102) (SQLExecDirectW)") [SQL: 'UPDATE item SET id=? WHERE item.id = ?'] [parameters: ('1', 1)]
This is caused by sqlalchemy finding the item and doing an update of the identity/primary key column, which mssql does not like.
Comments (1)
-
repo owner - Log in to comment
it looks like there is a string '1' being sent which would be your issue. If that's not the issue, then please read the bug posting guidelines at https://bitbucket.org/zzzeek/sqlalchemy/issues/new, http://www.sqlalchemy.org/support.html, and http://stackoverflow.com/help/mcve before reopening, thanks!