Есть два класса: пользователь и вопросНекоторых проблемы с MapperExtension из SQLAlchemy
Пользователь может иметь много вопросов, и он также содержит question_count для записи граф вопросов принадлежат ему.
Итак, когда я добавляю новый вопрос, я хочу обновить 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()
я могу получить пользователь успешно, но: пользователь не может быть обновлен!
Look Я модифицировал пользователя:
user.question_count += 1
Но нет никакого 'обновление' SQL печататься в консоли, а
question_count
не обновляются.Я пытаюсь добавить
Session.flush()
илиSession.commit()
в методеafter_insert()
, но обе ошибки вызывают.
Есть ли что-то важное, что мне не хватает? Пожалуйста, помогите мне, спасибо
спасибо. Так что это сложная задача? Но это требование является общим, если есть хорошее решение, это будет здорово – Freewind