Как отключить автоматическое заполнение таблицы транзакций при управлении версиями sqlalchemy для запуска тестов?

Я работаю с sqlalchemy-continuum, чтобы использовать управление версиями для выбранных таблиц базы данных в приложении flask с mssql. В своих сквозных тестах я запускаю контекст приложения flask, который заполняет глобальный объект g flask информацией о пользователе, которую sqlalchemy-continuum обрабатывает через свой UserPlugin. Проблема в том, что я хочу загрузить точное состояние базы данных из рукописных файлов JSON (с использованием библиотеки flask-fixtures), и для этого мне нужен полный контроль над тем, что находится в базе данных. Поскольку sqlalchemy-continuum автоматически заполняет таблицу транзакций, когда мой json содержит данные для таблиц с версиями, я не могу контролировать информацию о пользователе, хранящуюся в таблице транзакций. Я хочу иметь возможность сделать что-то подобное в процессе загрузки состояния БД из моего файла json "fixture":

              # establish if a transaction table is provided in the json state (by me)
        if fixture["model"] == "transaction":
                    special_transaction = fixture
 
        ... 
        # code for loading db state for all 'normal' tables then later:

        if special_transaction is not None:
            statement = text(
                "insert into [transaction] "
                "(issued_at, remote_addr, user_id) "
                "values (:remote_addr, :issued_at, :user_id)"
            )
            session = <the code that gets my session>
            for record in fixture["records"]:
                session.execute(statement, record)
            session.commit()

В настоящее время это не работает, потому что sqlalchemy-continuum к этому моменту уже «волшебным образом» заполнил таблицу транзакций, поэтому у меня возникают конфликты при попытке добавить в нее свои пользовательские данные. Как я могу отключить это поведение, чтобы получить полный контроль над состоянием моей базы данных во время тестового запуска?

0 ответов

Другие вопросы по тегам