diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/lambdas.py | 11 |
2 files changed, 11 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index 0f68a3fef..e43fa09a0 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -2865,7 +2865,7 @@ class SelectInLoader(PostLoader, util.MemoizedSlots): ), lambda_cache=self._query_cache, global_track_bound_values=False, - track_on=(self, effective_entity) + tuple(pk_cols), + track_on=(self, effective_entity) + (tuple(pk_cols),), ) if not self.parent_property.bake_queries: diff --git a/lib/sqlalchemy/sql/lambdas.py b/lib/sqlalchemy/sql/lambdas.py index 06db8f95e..ddc4774db 100644 --- a/lib/sqlalchemy/sql/lambdas.py +++ b/lib/sqlalchemy/sql/lambdas.py @@ -772,7 +772,16 @@ class AnalyzedCode(object): from the "track_on" parameter passed to a :class:`.LambdaElement`. """ - if isinstance(elem, traversals.HasCacheKey): + + if isinstance(elem, tuple): + # tuple must contain hascachekey elements + def get(closure, opts, anon_map, bindparams): + return tuple( + tup_elem._gen_cache_key(anon_map, bindparams) + for tup_elem in opts.track_on[idx] + ) + + elif isinstance(elem, traversals.HasCacheKey): def get(closure, opts, anon_map, bindparams): return opts.track_on[idx]._gen_cache_key(anon_map, bindparams) |
