From cfb9bbde7da6fe2b145a49851dc2d6424941ef25 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 22 Jul 2008 13:45:29 +0000 Subject: [PATCH] allow SQLA-defaults on table columns that are excluded in the mapper --- lib/sqlalchemy/orm/mapper.py | 2 +- test/orm/defaults.py | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 7332e3104a..d7b7fbb7c0 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1264,7 +1264,7 @@ class Mapper(object): generated_cols.append(self.version_id_col) for c in generated_cols: - if c.key in params: + if c.key in params and c in self._columntoproperty: self._set_state_attr_by_column(state, c, params[c.key]) deferred_props = [prop.key for prop in [self._columntoproperty[c] for c in postfetch_cols]] diff --git a/test/orm/defaults.py b/test/orm/defaults.py index 9f1ecda103..844a81bc4f 100644 --- a/test/orm/defaults.py +++ b/test/orm/defaults.py @@ -98,6 +98,24 @@ class TriggerDefaultsTest(_base.MappedTest): eq_(d1.col3, 'up') eq_(d1.col4, 'up') - +class ExcludedDefaultsTest(_base.MappedTest): + def define_tables(self, metadata): + dt = Table('dt', metadata, + Column('id', Integer, primary_key=True), + Column('col1', String(20), default="hello"), + ) + + @testing.resolve_artifact_names + def test_exclude(self): + class Foo(_base.ComparableEntity): + pass + mapper(Foo, dt, exclude_properties=('col1',)) + + f1 = Foo() + sess = create_session() + sess.add(f1) + sess.flush() + eq_(dt.select().execute().fetchall(), [(1, "hello")]) + if __name__ == "__main__": testenv.main() -- 2.47.3