stmt = update(User).where(User.name == "squidward").values(name="spongebob").\
execution_options(synchronize_session="fetch")
- session.execute(stmt)
+ result = session.execute(stmt)
Above, the :meth:`_dml.Update.execution_options` method may be used to
establish execution-time options such as "synchronize_session".
+The result object returned is an instance of :class:`_result.CursorResult`; to
+retrieve the number of rows matched by any UPDATE or DELETE statement, use
+:attr:`_result.CursorResult.rowcount`::
+
+ num_rows_matched = result.rowcount
+
DELETEs work in the same way as UPDATE except there is no "values / set"
clause established. When synchronize_session is used, matching objects
within the :class:`_orm.Session` will be marked as deleted and expunged.
sess.execute(select(User).order_by(User.id)).scalars().all()
)
- sess.execute(
+ result = sess.execute(
update(User)
.where(User.age > 29)
.values({"age": User.age - 10})
.execution_options(synchronize_session="evaluate"),
)
+ eq_(result.rowcount, 2)
eq_([john.age, jack.age, jill.age, jane.age], [25, 37, 29, 27])
eq_(
sess.execute(select(User.age).order_by(User.id)).all(),
list(zip([25, 37, 29, 27])),
)
- sess.execute(
+ result = sess.execute(
update(User)
.where(User.age > 29)
.values({User.age: User.age - 10})
- .execution_options(synchronize_session="evaluate")
+ .execution_options(synchronize_session="fetch")
)
+ eq_(result.rowcount, 1)
eq_([john.age, jack.age, jill.age, jane.age], [25, 27, 29, 27])
eq_(
sess.query(User.age).order_by(User.id).all(),
.where(User.age > 29)
.values({"age": User.age - 10})
)
- sess.execute(
+ result = sess.execute(
stmt, execution_options={"synchronize_session": "fetch"}
)
+ eq_(result.rowcount, 2)
# these are simple values, these are now evaluated even with
# the "fetch" strategy, new in 1.4, so there is no expiry
eq_([john.age, jack.age, jill.age, jane.age], [25, 37, 29, 27])