Есть два класса: Пользователь и Вопрос
У пользователя может быть много вопросов, и он также содержит 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 (Пользователь) .filter_by (id = instance.user_id) .one ()
Я могу получить пользователя успешно, но: пользователь не может быть обновлен!
Посмотрите, я изменил пользователя:
user.question_count + = 1
Но в консоли не напечатано «обновление» sql, и
question_count
не обновляются.
Я пытаюсь добавить Session.flush ()
или Session.commit ()
в
after_insert ()
, но оба вызывают ошибки.
Есть ли что-то важное, что я пропускаю? Пожалуйста, помогите мне, спасибо