Einige Probleme mit MapperExtension von sqlalchemy

Es gibt zwei Klassen: User und Question

Ein Benutzer hat möglicherweise viele Fragen und enthält auch eine Fragenanzahl, um die Anzahl der Fragen aufzuzeichnen, die ihm gehören.

So, wenn ich eine neue Frage hinzufüge, möchte ich den question_count des Benutzers aktualisieren. Zuerst mache ich als:

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


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

Alles läuft gut

Aber ich werde Event Callback nicht verwenden, um dasselbe zu tun. Wie folgt

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

Hinweis in der Methode "after_insert":

instance.user # -> Get None!!!

Warum

Wenn ich diese Zeile ändere in:

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

Ich kann den Benutzer erfolgreich abrufen, aber: Der Benutzer kann nicht aktualisiert werden!

Look Ich habe den Benutzer geändert:

user.question_count += 1

Aber in der Konsole wird kein 'Update'-SQL-Code gedruckt, und dasquestion_count werden nicht aktualisiert.

Ich versuche, @ hinzuzufügSession.flush() oderSession.commit() in demafter_insert() -Methode, aber beide verursachen Fehler.

Gibt es eine wichtige Sache, die ich vermisse? Bitte hilf mir, danke

Antworten auf die Frage(4)

Ihre Antwort auf die Frage