* ``session`` - the :class:`.Session` involved
* ``query`` -the :class:`.Query` object that this update operation
was called upon.
+ * ``values`` The "values" dictionary that was passed to
+ :meth:`.Query.update`.
* ``context`` The :class:`.QueryContext` object, corresponding
to the invocation of an ORM query.
* ``result`` the :class:`.ResultProxy` returned as a result of the
bulk UPDATE operation.
+ .. seealso::
+
+ :meth:`.QueryEvents.before_compile_update`
+
+ :meth:`.SessionEvents.after_bulk_delete`
"""
* ``result`` the :class:`.ResultProxy` returned as a result of the
bulk DELETE operation.
+ .. seealso::
+
+ :meth:`.QueryEvents.before_compile_delete`
+
+ :meth:`.SessionEvents.after_bulk_update`
"""
"""Allow modifications to the :class:`.Query` object within
:meth:`.Query.update`.
- Like the :meth:`.QueryEvents.before_compile` event, this event
- should be configured with ``retval=True``, and the modified
+ Like the :meth:`.QueryEvents.before_compile` event, if the event
+ is to be used to alter the :class:`.Query` object, it should
+ be configured with ``retval=True``, and the modified
:class:`.Query` object returned, as in ::
@event.listens_for(Query, "before_compile_update", retval=True)
if desc['type'] is User:
entity = desc['entity']
query = query.filter(entity.deleted == False)
+
+ update_context.values['timestamp'] = datetime.utcnow()
return query
+ The ``.values`` dictionary of the "update context" object can also
+ be modified in place as illustrated above.
+
:param query: a :class:`.Query` instance; this is also
the ``.query`` attribute of the given "update context"
object.
:param update_context: an "update context" object which is
the same kind of object as described in
:paramref:`.QueryEvents.after_bulk_update.update_context`.
+ The object has a ``.values`` attribute in an UPDATE context which is
+ the dictionary of parameters passed to :meth:`.Query.update`. This
+ dictionary can be modified to alter the VALUES clause of the
+ resulting UPDATE statement.
.. versionadded:: 1.2.17
if desc["type"] is User:
entity = desc["expr"]
query = query.filter(entity.id != 10)
+
+ update_context.values["name"] = (
+ update_context.values["name"] + "_modified"
+ )
return query
User = self.classes.User
CompiledSQL(
"UPDATE users SET name=:name WHERE "
"users.id = :id_1 AND users.id != :id_2",
- [{"name": "ed", "id_1": 7, "id_2": 10}],
+ [{"name": "ed_modified", "id_1": 7, "id_2": 10}],
)
)