Выполнить создание триггера с помощью alembic - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь создать следующий триггер:

create_update_rating_trigger = sa.DDL(
    f'''
    CREATE FUNCTION update_rating() RETURNS TRIGGER AS $$
      BEGIN
        UPDATE "{RATING_TABLE}" SET
          {AVERAGE} = (({AVERAGE} * {VOTES}) + new.{VALUE}) / ({VOTES} + 1),
          {VOTES} = {VOTES} + 1
        FROM "{USER_TABLE}"
        WHERE
          "{USER_TABLE}".{USER_ID} = new.{RATED_USER_ID}
          AND "{USER_TABLE}".{USER_RATING_ID} = "{RATING_TABLE}".{RATING_ID};
        RETURN NULL;
      END;
    $$ LANGUAGE plpgsql;

    CREATE TRIGGER update_rating_trigger
    AFTER INSERT ON vote
    FOR EACH ROW
    EXECUTE PROCEDURE update_rating();
    '''
)


sa.event.listen(ratings, 'after_create', create_update_rating_trigger)

Тем не менее, когда я выполняю:

alembic revision --autogenerate

он не может создать транзакционный DDL в миграциях. Есть ли способ сделать это?

...