summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/orm/mapper.py2
-rw-r--r--test/orm/defaults.py20
2 files changed, 20 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py
index 7332e3104..d7b7fbb7c 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 9f1ecda10..844a81bc4 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()