Il problema è che non riesco a capire come usare SQLAlchemy per avvisarmi quando un oggetto entra in un nuovo stato.Come posso ottenere lo stato precedente di un oggetto ORM SQLAlchemy dopo un aggiornamento db?
sto usando SQLAlchemy ORM (dichiarativa) per aggiornare un oggetto:
class Customer(declarative_base()):
__table_name__ = "customer"
id = Column(Integer, primary_key=True)
status = Column(String)
Voglio sapere quando un oggetto entra in uno stato. Soprattutto dopo che è stato emesso un UPDATE e quando lo stato cambia. Per esempio. Customer.status == 'registered'
e in precedenza aveva uno stato diverso.
Attualmente sto facendo questo con un evento attributo 'set'
:
from sqlalchemy import event
from model import Customer
def on_set_attribute(target, value, oldvalue, initiator):
print target.status
print value
print oldvalue
event.listen(
Customer.status,
'set',
on_set_attribute,
propagate=True,
active_history=True)
Il mio codice spara ogni volta 'set' è chiamato a quell'attributo, e io verificare se il value
e la oldvalue
sono diversi. Il problema è che il parametro target
non è completamente formato quindi non ha ancora tutti i valori di attributo popolati.
C'è un modo migliore per farlo? Grazie!