- changed status to resolved
(regression in 0.6 with postgresql) insert in a table with composite primary key
Issue #1778
resolved
- PostgreSQL 8.3
- SQLAlchemy 0.6.0
- psycopg2 2.2.0
I try to insert an object in a table having a composite PK.[BR] Both using SQL and ORM, it fails with SA 0.6.0.[BR] But it works with 0.5.8 (same versions of psycopg2 and postgresql).
Traceback:
Traceback (most recent call last):
File "composite.py", line 59, in <module>
main()
File "composite.py", line 51, in main
sa_session.commit()
File "./lib/python2.5/site-packages/sqlalchemy/orm/session.py", line 655, in commit
self.transaction.commit()
File "./lib/python2.5/site-packages/sqlalchemy/orm/session.py", line 368, in commit
self._prepare_impl()
File "./lib/python2.5/site-packages/sqlalchemy/orm/session.py", line 352, in _prepare_impl
self.session.flush()
File "./lib/python2.5/site-packages/sqlalchemy/orm/session.py", line 1348, in flush
self._flush(objects)
File "./lib/python2.5/site-packages/sqlalchemy/orm/session.py", line 1429, in _flush
flush_context.execute()
File "./lib/python2.5/site-packages/sqlalchemy/orm/unitofwork.py", line 293, in execute
rec.execute(self)
File "./lib/python2.5/site-packages/sqlalchemy/orm/unitofwork.py", line 426, in execute
uow
File "./lib/python2.5/site-packages/sqlalchemy/orm/mapper.py", line 1559, in _save_obj
c = connection.execute(statement.values(value_params), params)
File "./lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 1109, in execute
return Connection.executors[c](c)(self, object, multiparams, params)
File "./lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 1186, in _execute_clauseelement
return self.__execute_context(context)
File "./lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 1225, in __execute_context
r = context.get_result_proxy()._autoclose()
File "./lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 2065, in _autoclose
self.context._fetch_implicit_returning(self)
File "./lib/python2.5/site-packages/sqlalchemy/engine/default.py", line 580, in _fetch_implicit_returning
for c, v in zip(table.primary_key, self._inserted_primary_key)
File "./lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 1751, in __getitem__
processor, index = self._parent._key_fallback(key)
File "./lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 1928, in _key_fallback
"Could not locate column in row for column '%s'" % key)
sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'publi_link.link_rev'"
Table:
CREATE TABLE publi_link (
link_id SERIAL,
link_rev SMALLINT,
article_id INTEGER,
url VARCHAR(2000),
PRIMARY KEY (link_id, link_rev)
);
Comments (2)
-
repo owner -
repo owner - removed milestone
Removing milestone: 0.6.1 (automated comment)
- Log in to comment
its the zero you have. the bug is fixed in ae495c69adacdd341d4ab22df4eedbbc6cb9df8e . Workaround is to set implicit_returning=False on your engine or individual Table, or don't use zeroes in your primary key.