from sqlalchemy.orm import attributes@event.listens_for(User.name, "set")def receive_set(target, value, oldvalue, initiator): print(f"Name changed from {oldvalue} to {value}")
append - Item appended to collection
@event.listens_for(User.addresses, "append")def receive_append(target, value, initiator): print(f"Address added to user {target.id}")
remove - Item removed from collection
@event.listens_for(User.addresses, "remove")def receive_remove(target, value, initiator): print(f"Address removed from user {target.id}")
@event.listens_for(User, "before_insert", propagate=True)def receive_before_insert(mapper, connection, target): # Applies to User and all subclasses pass
@event.listens_for(Session, "after_flush")def receive_after_flush(session, flush_context): for obj in session.new: audit_log("INSERT", obj) for obj in session.dirty: audit_log("UPDATE", obj) for obj in session.deleted: audit_log("DELETE", obj)