From 4550983e0ce2f35b3585e53894c941c23693e71d Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 20 May 2020 13:41:44 -0400 Subject: Performance fixes for new result set A few small mistakes led to huge callcounts. Additionally, the warn-on-get behavior which is attempting to warn for deprecated access in SQLAlchemy 2.0 is very expensive; it's not clear if its feasible to have this warning or to somehow alter how it works. Fixes: #5340 Change-Id: I73bdd2d7b6f1b25cc0222accabd585cf761a5af4 --- lib/sqlalchemy/sql/compiler.py | 19 +++++++++---------- lib/sqlalchemy/sql/selectable.py | 29 ++++++++++++++++------------- 2 files changed, 25 insertions(+), 23 deletions(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index d32e3fd7a..ccc1b53fe 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -840,16 +840,17 @@ class SQLCompiler(Compiled): ), replace_context=err, ) - resolved_extracted = dict( - zip([b.key for b in orig_extracted], extracted_parameters) - ) + + resolved_extracted = { + b.key: extracted + for b, extracted in zip(orig_extracted, extracted_parameters) + } else: resolved_extracted = None if params: pd = {} - for bindparam in self.bind_names: - name = self.bind_names[bindparam] + for bindparam, name in self.bind_names.items(): if bindparam.key in params: pd[name] = params[bindparam.key] elif name in params: @@ -884,7 +885,7 @@ class SQLCompiler(Compiled): return pd else: pd = {} - for bindparam in self.bind_names: + for bindparam, name in self.bind_names.items(): if _check and bindparam.required: if _group_number: raise exc.InvalidRequestError( @@ -908,11 +909,9 @@ class SQLCompiler(Compiled): value_param = bindparam if bindparam.callable: - pd[ - self.bind_names[bindparam] - ] = value_param.effective_value + pd[name] = value_param.effective_value else: - pd[self.bind_names[bindparam]] = value_param.value + pd[name] = value_param.value return pd @property diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index bcab46d84..cc82c509b 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -3527,12 +3527,14 @@ class Select( @classmethod def _create_select_from_fromclause(cls, target, entities, *arg, **kw): if arg or kw: - util.warn_deprecated_20( - "Passing arguments to %s.select() is deprecated and " - "will be removed in SQLAlchemy 2.0. Please use generative " - "methods such as select().where(), etc." - % (target.__class__.__name__,) - ) + if util.SQLALCHEMY_WARN_20: + util.warn_deprecated_20( + "Passing arguments to %s.select() is deprecated and " + "will be removed in SQLAlchemy 2.0. " + "Please use generative " + "methods such as select().where(), etc." + % (target.__class__.__name__,) + ) return Select(entities, *arg, **kw) else: return Select._create_select(*entities) @@ -3744,13 +3746,14 @@ class Select( :meth:`_expression.Select.apply_labels` """ - util.warn_deprecated_20( - "The select() function in SQLAlchemy 2.0 will accept a " - "series of columns / tables and other entities only, " - "passed positionally. For forwards compatibility, use the " - "sqlalchemy.future.select() construct.", - stacklevel=4, - ) + if util.SQLALCHEMY_WARN_20: + util.warn_deprecated_20( + "The select() function in SQLAlchemy 2.0 will accept a " + "series of columns / tables and other entities only, " + "passed positionally. For forwards compatibility, use the " + "sqlalchemy.future.select() construct.", + stacklevel=4, + ) self._auto_correlate = correlate -- cgit v1.2.1