Некоторые проблемы с MapperExtension из sqlalchemy

Есть два класса: пользователь и вопрос

У пользователя может быть много вопросов, и он также содержит question_count для записи количества вопросов, которые ему принадлежат.

Поэтому, когда я добавляю новый вопрос, я хочу обновить счетчик вопросов пользователя. Сначала я делаю как:

question = Question(title='aaa', content='bbb') 
Session.add(question) 
Session.flush() 


user = question.user 
### user is not None 
user.question_count += 1 
Session.commit() 

Все идет хорошо.

Но я не хочу использовать функцию обратного вызова события, чтобы сделать то же самое. Следующим образом:

from sqlalchemy.orm.interfaces import MapperExtension 
class Callback(MapperExtension): 
    def after_insert(self, mapper, connection, instance): 
         user = instance.user 
         ### user is None !!! 
         user.question_count += 1 


class Question(Base): 
    __tablename__ = "questions" 
    __mapper_args__ = {'extension':Callback()} 
    .... 

Обратите внимание на метод after_insert:

instance.user # -> Get None!!!

Зачем?

Если я изменю эту строку на:

Session.query(User).filter_by(id=instance.user_id).one()

Я могу получить пользователя успешно, но: пользователь не может быть обновлен!

Смотри, я изменил пользователя:

user.question_count += 1

Но в консоли нет «обновления» sql, иquestion_count не обновляются.

Я пытаюсь добавитьSession.flush() или жеSession.commit() вafter_insert() метод, но оба вызывают ошибки.

Есть ли что-то важное, что мне не хватает? Пожалуйста, помогите мне, спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос