I think the issue might be related to this:
https://github.com/zopefoundation/zope.sqlalchemy/blob/master/src/zope/sqlalchemy/datamanager.py#L213
Record that a flush has occurred on a session's connection. This allows
the DataManager to rollback rather than commit on read only transactions.
In a nutshell -- the call to execute isn't touching the ORM level; just
the sqlalchemy core. As such, it's not marking things as changed. Not
sure why a rollback is preferred to no activity, but my guess would be
it's easier on replication.
According to the log, the transaction is neither