Ok, thanks for the quick response! Keep up the exceptionally good work! Op woensdag 21 februari 2018 17:19:44 UTC+1 schreef Mike Bayer: > > On Wed, Feb 21, 2018 at 10:04 AM, Mike Bayer <mik...@zzzcomputing.com > <javascript:>> wrote: > > On Wed, Feb 21, 2018 at 6:33 AM, Jeff Horemans <horema...@gmail.com > <javascript:>> wrote: > >> When migrating from 1.1 tot 1.2, we noticed that the version_id is not > >> getting set on a class that maps to a select of a table. > >> I've added a test case class below to the test_versioning.py included > in > >> SQLAlchemy to confirm this behaviour. > >> This case runs fine in versions 1.0 and 1.1, but gives a KeyError on > the > >> version_id in 1.2 as shown in the stack traces below. > >> > >> I'll be happy to make an issue on the repository if needed. > > > > no need, this is completely perfect, I'll create the issue. I hope to > > get this into 1.2.4 which I need to release hopefully this week / > > today preferred (but I've wanted to release for two days already, ran > > out of time). thanks! > > this is > https://bitbucket.org/zzzeek/sqlalchemy/issues/4193/versioning-logic-fails-for-mapping-against > > , where you'll note that I found two more issues with versioning and > mappers to select statements, which you've already been working > around. this is not a use case we tested for. > > > > > > > >> > >> class VersioningSelectTest(fixtures.MappedTest): > >> > >> __backend__ = True > >> > >> @classmethod > >> def define_tables(cls, metadata): > >> Table('version_table', metadata, > >> Column('id', Integer, primary_key=True, > >> test_needs_autoincrement=True), > >> Column('version_id', Integer, nullable=False), > >> Column('value', String(40), nullable=False)) > >> > >> @classmethod > >> def setup_classes(cls): > >> class Foo(cls.Basic): > >> pass > >> > >> def _fixture(self): > >> Foo, version_table = self.classes.Foo, > self.tables.version_table > >> > >> current = version_table.select().where(version_table.c.id > > >> 0).alias('current_table') > >> > >> mapper(Foo, current, version_id_col=version_table.c.version_id) > >> s1 = Session() > >> return s1 > >> > >> @testing.emits_warning(r".*versioning cannot be verified") > >> def test_multiple_updates(self): > >> Foo = self.classes.Foo > >> > >> s1 = self._fixture() > >> f1 = Foo(value='f1') > >> f2 = Foo(value='f2') > >> s1.add_all((f1, f2)) > >> s1.commit() > >> > >> f1.value = 'f1rev2' > >> f2.value = 'f2rev2' > >> s1.commit() > >> > >> eq_( > >> s1.query(Foo.id, Foo.value, > >> Foo.version_id).order_by(Foo.id).all(), > >> [(f1.id, 'f1rev2', 2), (f2.id, 'f2rev2', 2)] > >> ) > >> > >> > >> > >> FAIL > >> > test/orm/test_versioning.py::VersioningSelectTest_postgresql+psycopg2_9_5_11::()::test_multiple_updates > > > >> > >> ================================================================== > FAILURES > >> ================================================================== > >> ___________________________________ > >> VersioningSelectTest_postgresql+psycopg2_9_5_11.test_multiple_updates > >> ____________________________________ > >> Traceback (most recent call last): > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/orm/test_versioning.py", > > > >> line 131, in test_multiple_updates > >> s1.commit() > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/session.py", > > > >> line 943, in commit > >> self.transaction.commit() > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/session.py", > > > >> line 467, in commit > >> self._prepare_impl() > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/session.py", > > > >> line 447, in _prepare_impl > >> self.session.flush() > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/session.py", > > > >> line 2243, in flush > >> self._flush(objects) > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/session.py", > > > >> line 2369, in _flush > >> transaction.rollback(_capture_exception=True) > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/util/langhelpers.py", > > > >> line 66, in __exit__ > >> compat.reraise(exc_type, exc_value, exc_tb) > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/session.py", > > > >> line 2333, in _flush > >> flush_context.execute() > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/unitofwork.py", > > > >> line 391, in execute > >> rec.execute(self) > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/unitofwork.py", > > > >> line 556, in execute > >> uow > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/persistence.py", > > > >> line 193, in save_obj > >> update_version_id in states_to_update > >> File > >> > "/home/jeffh/vortex-workspace/v-finance/subrepos/SQLAlchemy-1.2.3/test/../lib/sqlalchemy/orm/persistence.py", > > > >> line 1131, in _finalize_insert_update_commands > >> if state_dict[mapper._version_id_prop.key] is None: > >> KeyError: u'version_id > >> > >> -- > >> SQLAlchemy - > >> The Python SQL Toolkit and Object Relational Mapper > >> > >> http://www.sqlalchemy.org/ > >> > >> To post example code, please provide an MCVE: Minimal, Complete, and > >> Verifiable Example. See http://stackoverflow.com/help/mcve for a full > >> description. > >> --- > >> You received this message because you are subscribed to the Google > Groups > >> "sqlalchemy" group. > >> To unsubscribe from this group and stop receiving emails from it, send > an > >> email to sqlalchemy+...@googlegroups.com <javascript:>. > >> To post to this group, send email to sqlal...@googlegroups.com > <javascript:>. > >> Visit this group at https://groups.google.com/group/sqlalchemy. > >> For more options, visit https://groups.google.com/d/optout. >
-- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.