There are two classes: User and Question

A user may have many questions, and it also contains a question_count
to record the the count of questions belong to him.

So, when I add a new question, I want update the question_count of the
user. At first, I do as:

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

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

Everything goes well.

But I wan't to use event callback to do the same thing. As following:

    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()}
        ....

1. Note in the "after_insert" method:

    instance.user # -> Get None!!!

   Why?

2. If I change that line to:

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

   I can get the user successfully, But: the user can't be updated!

   Look I have modified the user:

       user.question_count += 1

   But there is no 'update' sql printed in the console, and the
'question_count' are not updated.

3. I try to add 'Session.flush()' or 'Session.commit()' in the
'after_insert()' method, but both cause errors.


Is there any important thing I'm missing? Please help me, thank you
everyone!

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to