summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-08-18 17:12:06 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-08-18 17:15:04 -0400
commit399c03939768d4c8afb29ca1e091b046ea4fc88f (patch)
tree93fdbe755ee82f15ad727a605ccee84d236517fb
parent4ed640ba907b529d79c634baf37792ce14e59805 (diff)
downloadsqlalchemy-399c03939768d4c8afb29ca1e091b046ea4fc88f.tar.gz
- optimize collection of cols we insert as none
-rw-r--r--lib/sqlalchemy/orm/mapper.py18
-rw-r--r--lib/sqlalchemy/orm/persistence.py10
2 files changed, 11 insertions, 17 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py
index 14dc5d7f8..89c092b58 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 c949e4776..e36f87991 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)