I can not get versioning to work in Oracle (it does work
for me in sqlite and Postgresql just changing the connect string).
I am using timestamp with time zones for the version_id_col. Can anyone
verify that this does work.
SQLAlchemy==0.7.8
cx-Oracle==5.1.2
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
>>> import ver.models as m; import transaction
>>> s = m.DBSession()
>>> i = s.query(m.MyModel).first()
2012-07-19 22:32:54,807 INFO [sqlalchemy.engine.base.Engine][MainThread] SELECT USER FROM DUAL
2012-07-19 22:32:54,807 INFO [sqlalchemy.engine.base.Engine][MainThread] {}
2012-07-19 22:32:54,818 INFO [sqlalchemy.engine.base.Engine][MainThread] BEGIN (implicit)
2012-07-19 22:32:54,819 INFO
[sqlalchemy.engine.base.Engine][MainThread] SELECT models_id,
models_name, models_value, models_ins_upd_timestamp
FROM (SELECT
models.id AS models_id,
models.name AS models_name,
models.value AS models_value, models.ins_upd_timestamp AS
models_ins_upd_timestamp
FROM models)
WHERE ROWNUM <= :ROWNUM_1
2012-07-19 22:32:54,819 INFO [sqlalchemy.engine.base.Engine][MainThread] {'ROWNUM_1': 1}
>>> i.value += 1
>>> transaction.commit()
2012-07-19 22:33:18,656 INFO
[sqlalchemy.engine.base.Engine][MainThread] UPDATE models SET
value=:value, ins_upd_timestamp=:ins_upd_timestamp WHERE
models.id =
:models_id AND models.ins_upd_timestamp = :models_ins_upd_timestamp
2012-07-19 22:33:18,656 INFO
[sqlalchemy.engine.base.Engine][MainThread] {'ins_upd_timestamp':
datetime.datetime(2012, 7, 19, 22, 33, 18, 655856),
'models_ins_upd_timestamp': datetime.datetime(2012, 7, 19, 22, 31, 46,
814740), 'value': 2, 'models_id': 1}
2012-07-19 22:33:18,659 INFO [sqlalchemy.engine.base.Engine][MainThread] ROLLBACK
Traceback (most recent call last):
File "<console>", line 1, in <module>
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/transaction-1.3.0-py2.6.egg/transaction/_manager.py",
line 107, in commit
return self.get().commit()
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/transaction-1.3.0-py2.6.egg/transaction/_transaction.py",
line 354, in commit
reraise(t, v, tb)
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/transaction-1.3.0-py2.6.egg/transaction/_transaction.py",
line 345, in commit
self._commitResources()
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/transaction-1.3.0-py2.6.egg/transaction/_transaction.py",
line 493, in _commitResources
reraise(t, v, tb)
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/transaction-1.3.0-py2.6.egg/transaction/_transaction.py",
line 465, in _commitResources
rm.tpc_begin(self)
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/zope.sqlalchemy-0.7.1-py2.6.egg/zope/sqlalchemy/datamanager.py",
line 86, in tpc_begin
self.session.flush()
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/SQLAlchemy-0.7.8-py2.6-linux-i686.egg/sqlalchemy/orm/session.py",
line 1583, in flush
self._flush(objects)
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/SQLAlchemy-0.7.8-py2.6-linux-i686.egg/sqlalchemy/orm/session.py",
line 1654, in _flush
flush_context.execute()
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/SQLAlchemy-0.7.8-py2.6-linux-i686.egg/sqlalchemy/orm/unitofwork.py",
line 331, in execute
rec.execute(self)
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/SQLAlchemy-0.7.8-py2.6-linux-i686.egg/sqlalchemy/orm/unitofwork.py",
line 475, in execute
uow
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/SQLAlchemy-0.7.8-py2.6-linux-i686.egg/sqlalchemy/orm/persistence.py",
line 59, in save_obj
mapper, table, update)
File
"/home/timw/.virtualenvs/sat/lib/python2.6/site-packages/SQLAlchemy-0.7.8-py2.6-linux-i686.egg/sqlalchemy/orm/persistence.py",
line 504, in _emit_update_statements
(table.description, len(update), rows))
StaleDataError: UPDATE statement on table 'models' expected to update 1 row(s); 0 were matched.