From f2a94b6f1a8d1c2274ff81ae9968d22a22fd8503 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 14 Oct 2020 10:39:43 -0400 Subject: [PATCH] Don't use private API to get query criteria Another change for SQLAlchemy 1.4 is the mechanics of how the ``QueryContext`` object works. Update the update_match extension such that it does not rely upon the ``QueryContext`` object and uses public APIs instead. Change-Id: I27e20e59bce8c98b5a507c617364652aa6eb33f5 --- oslo_db/sqlalchemy/update_match.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/oslo_db/sqlalchemy/update_match.py b/oslo_db/sqlalchemy/update_match.py index 8e139e96..577fb813 100644 --- a/oslo_db/sqlalchemy/update_match.py +++ b/oslo_db/sqlalchemy/update_match.py @@ -484,11 +484,10 @@ def _update_stmt_from_query(mapper, query, values): mapper.column_attrs[key], value ) for key, value in values.items() ) - query = query.enable_eagerloads(False) - context = query._compile_context() - primary_table = context.statement.froms[0] + primary_table = inspect(query.column_descriptions[0]['entity']).local_table + where_criteria = query.whereclause update_stmt = sql.update(primary_table, - context.whereclause, + where_criteria, upd_values) return update_stmt