Parece que você está usando o gerenciador de transações zodb na pirâmide.
Você tem que marcar a sessão como alterada
http://www.upfrontsystems.co.za/Members/izak/sysadman/how-to-commit-a-transaction-even-when-sqlalchemy-thinks-the-session-is-clean
Você deve fazer algo como
from zope.sqlalchemy import mark_changed
mark_changed(Session)
se isso não funcionar tente
from zope.sqlalchemy import ZopeTransactionExtension
Session.configure(extension=ZopeTransactionExtension('changed'))