diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-08-05 19:17:07 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-08-05 19:19:02 -0400 |
commit | 3729a070d23421c94239bd24520592287476fdde (patch) | |
tree | 730dc7940da32e1f4b1b866c7956127c0f59ea6d /lib/sqlalchemy/sql/traversals.py | |
parent | b75630cec9418ef087e7c6af0370ac6ba728a251 (diff) | |
download | sqlalchemy-3729a070d23421c94239bd24520592287476fdde.tar.gz |
accommodate for untracked boundparam lambda in offline_string
Fixed an issue in the ``CacheKey.to_offline_string()`` method used by the
dogpile.caching example where attempting to create a proper cache key from
the special "lambda" query generated by the lazy loader would fail to
include the parameter values, leading to an incorrect cache key.
Fixes: #6858
Change-Id: Ice27087583c6f3ff79cf7d5b879e5dd0a4e58158
Diffstat (limited to 'lib/sqlalchemy/sql/traversals.py')
-rw-r--r-- | lib/sqlalchemy/sql/traversals.py | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/sqlalchemy/sql/traversals.py b/lib/sqlalchemy/sql/traversals.py index a86d16ef4..3d377271f 100644 --- a/lib/sqlalchemy/sql/traversals.py +++ b/lib/sqlalchemy/sql/traversals.py @@ -299,15 +299,15 @@ class CacheKey(namedtuple("CacheKey", ["key", "bindparams"])): else: sql_str = statement_cache[self.key] - return repr( - ( - sql_str, - tuple( - parameters.get(bindparam.key, bindparam.value) - for bindparam in self.bindparams - ), + if not self.bindparams: + param_tuple = tuple(parameters[key] for key in sorted(parameters)) + else: + param_tuple = tuple( + parameters.get(bindparam.key, bindparam.value) + for bindparam in self.bindparams ) - ) + + return repr((sql_str, param_tuple)) def __eq__(self, other): return self.key == other.key |