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