From: Mike Bayer Date: Mon, 18 Aug 2014 21:12:06 +0000 (-0400) Subject: - optimize collection of cols we insert as none X-Git-Tag: rel_1_0_0b1~216^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=399c03939768d4c8afb29ca1e091b046ea4fc88f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - optimize collection of cols we insert as none --- diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 14dc5d7f87..89c092b580 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1894,27 +1894,27 @@ class Mapper(InspectionAttr): """ @_memoized_configured_property - def _propkey_to_col(self): + def _insert_cols_as_none(self): return dict( ( table, - dict( - (self._columntoproperty[col].key, col) - for col in columns - ) + frozenset( + col.key for col in columns + if not col.primary_key and + not col.server_default and not col.default) ) for table, columns in self._cols_by_table.items() ) @_memoized_configured_property - def _col_to_propkey(self): + def _propkey_to_col(self): return dict( ( table, - [ - (col, self._columntoproperty[col].key) + dict( + (self._columntoproperty[col].key, col) for col in columns - ] + ) ) for table, columns in self._cols_by_table.items() ) diff --git a/lib/sqlalchemy/orm/persistence.py b/lib/sqlalchemy/orm/persistence.py index c949e47764..e36f87991d 100644 --- a/lib/sqlalchemy/orm/persistence.py +++ b/lib/sqlalchemy/orm/persistence.py @@ -282,14 +282,8 @@ def _collect_insert_commands(table, states_to_insert): else: params[col.key] = value - for colkey in ( - set( - col.key for col in - mapper._cols_by_table[table] - if not col.primary_key and - not col.server_default and not col.default - ).difference(params).difference(value_params) - ): + for colkey in mapper._insert_cols_as_none[table].\ + difference(params).difference(value_params): params[colkey] = None has_all_pks = mapper._pk_keys_by_table[table].issubset(params)