Я пытаюсь отслеживать изменения в базе данных, и в настоящее время я пытаюсь сделать это с событиями картографа.Это прекрасно работает для стандартных таблиц, но, похоже, не срабатывает для таблиц-бриджей во многих отношениях.
Например, если у меня есть эти таблицы
# Main Classes
class TblContacts(BaseRelationsTable):
__tablename__ = 'tbl_contacts'
__relationstable__ = TblContactsContacts
_linkingtables__ = [TblEventsContacts, TblEiplContacts]
__friendlyname__ = "Contact"
guid = Column(String(36), primary_key=True)
created = Column(SubTimeStamp)
modified = Column(SubTimeStamp)
username = Column(SubString)
contact_type = Column(SubString)
name_first = Column(SubString)
name_last = Column(SubString)
job_title = Column(SubString)
company = Column(SubString)
phone = Column(SubPhone)
email = Column(SubEmail)
address_line1 = Column(SubString)
address_line2 = Column(SubString)
address_city = Column(SubString)
address_state = Column(SubString)
address_zip = Column(SubString)
address_country = Column(SubString)
relations = orm.relationship('TblContacts',
secondary='tbl_contacts_contacts',
primaryjoin='TblContacts.guid==TblContactsContacts.parent_id',
secondaryjoin='TblContacts.guid==TblContactsContacts.child_id',
)
class TblContactsContacts(BaseTable):
__tablename__ = "tbl_contacts_contacts"
__friendlyname__ = "TblContactsContacts"
guid = Column(SubUUID, primary_key=True, nullable=False, default=uuid.uuid4)
parent_id = Column(String, ForeignKey('tbl_contacts.guid'))
child_id = Column(String, ForeignKey('tbl_contacts.guid'))
И эти сопоставители применяются к этим таблицам
def _after_insert(target):
# Do Things
pass
def _after_update(target):
# Do Things
pass
def _after_delete(target):
# Do Things
pass
Из-за простоты кода я предпочел бы продолжать использоватьafter_insert, update ... Но я начинаю думать, что это не сработает.
Нужно ли ловить его с before_commit?и если да, то как мне просмотреть записи в сеансе, чтобы найти вставленные и обновленные записи?