Как настроить задачу «python-rq» для использования различных контекстов приложений?

#python-3.x #flask #pytest #flask-sqlalchemy

Вопрос:

В моем коде я добавил светильники, с помощью которых я могу добавлять данные в базу данных, как показано ниже —

 @pytest.fixture(scope="function")
def add_post():
    def _add_post(text, user_id, parent_id, branch_id):
        post = Posts(
            postBody={
                "text": text,
                "parent_id": parent_id,
                "branch_id": branch_id,
            },
            user_id=user_id,
        )
        db.session.add(post)
        db.session.commit()
        return post

    return _add_post
 

В моем тестовом примере первый экземпляр печати работает, но второй терпит неудачу —

 post1 = add_post("post1", user1.id, None, None)
post2 = add_post("post2", user2.id, post1.id, None)
print(post2.id) #This works
resp = client.post(
    "/v1/post/react/",
    data=json.dumps(
        {
            "post_id": post2.id,
            "emoji_id": 1
        }
    ),
    headers=headers,
)
print(post2.id) #This fails
 

resp Ответ приходит нормально, но почему я получаю эту ошибку —

 sqlalchemy.orm.exc.DetachedInstanceError: Instance <Posts at 0x7fab1d9eff70> is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: http://sqlalche.me/e/13/bhk3)
 

Это может происходить, потому что в фоновом python-rq режиме работает рабочий? и это создает отдельный контекст подключения к БД / приложения? Как настроить такой сценарий? Ниже приведен код для моей рабочей задачи, увеличивающий счетчик реакций.

 def increment_reaction_counter(post_id, emoji_id):
    temp_app = create_app()
    with temp_app.app_context():
        reaction_counter = ReactionCounts.get_existing(emoji_id, post_id)
        if reaction_counter is None:
            reaction_counter = ReactionCounts(emoji_id, post_id)
            db.session.add(reaction_counter)
        else:
            reaction_counter.count  = 1
        db.session.commit()