Событие SQLAlchemy before_update с использованием Postgres - PullRequest
0 голосов
/ 18 октября 2018

У меня есть скрипт, который сохраняет и обновляет данные в базе данных Postgres с помощью upserts:

        messageins = insert(Message).values(
            id = message.id,
            iserased = message.iserased,
            erasedby = eraserid,
            author = message.author.id,
            body = message.body,
            private = message.isprivate,
            created = convTime(message.timecreated),
            edited = convTime(message.timeedited),
            lobby = message.lobbyid,
            usermentions = message.mentions,
        )

        message_dict = {
            c.name: c
            for c in messageins.excluded
        }

        update_message = messageins.on_conflict_do_update(
            index_elements = ["id"],
            set_=message_dict
        )

        newdb.execute(update_message)

Я пытаюсь запустить функцию для события before_update:

def saveHistory(mapper, connect, target):
    historicaldata = dict(target)
    print("SaveHistory triggered\n")

event.listen(Message, 'before_insert', saveHistory)
event.listen(Message, 'before_update', saveHistory)

Функция saveHistory не работает.Я ничего не вижу в документации о событиях, связанных с Postgres.Должны ли эти прослушиватели событий работать с методом on_conflict_do_update ()?

1 Ответ

0 голосов
/ 26 октября 2018

Оказывает, что Postgres upserts, используя insert (), обходит ORM, где находятся перехватчики событий.Использование перехватов событий с этим методом вставки данных не поддерживается.

https://groups.google.com/forum/#!topic/sqlalchemy/Q1agVMU87_Q

...