]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
allow SQLA-defaults on table columns that are excluded in the mapper
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 22 Jul 2008 13:45:29 +0000 (13:45 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 22 Jul 2008 13:45:29 +0000 (13:45 +0000)
lib/sqlalchemy/orm/mapper.py
test/orm/defaults.py

index 7332e3104ac34c8f3795043a9430d6977a0dad69..d7b7fbb7c0255479c020c0bb1e470fa6f45d7bfe 100644 (file)
@@ -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]]
index 9f1ecda1034b8501af2fb05eff4a6d16e6dde3f3..844a81bc4f170c2ca9b87c0a97b7badb58e6cf66 100644 (file)
@@ -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()