Ci sono due classi: Utente e domandaAlcuni problemi con MapperExtension di sqlalchemy
Un utente può avere molte domande, e contiene anche un question_count per registrare il conte di domande gli appartiene.
Quindi, quando aggiungo una nuova domanda, desidero aggiornare il question_count dell'utente . Inizialmente, faccio come:
question = Question(title='aaa', content='bbb')
Session.add(question)
Session.flush()
user = question.user
### user is not None
user.question_count += 1
Session.commit()
Tutto va bene.
Ma non voglio usare callback di eventi per fare la stessa cosa. Come segue:
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()}
....
Nota nel metodo "after_insert":
instance.user # -> Get None!!!
Perché?
Se cambio quella linea a:
Session.query(User).filter_by(id=instance.user_id).one()
posso ottenere l'utente con successo, ma: l'utente non può essere aggiornato!
Guardate Ho modificato l'utente:
user.question_count += 1
ma non c'è nessuna sql 'update' stampati nella console, e il
question_count
non vengono aggiornati.cerco di aggiungere
Session.flush()
oSession.commit()
nel metodoafter_insert()
, ma entrambi gli errori di causa.
C'è qualche cosa importante che mi manca? Per favore aiutatemi, grazie
grazie. Quindi è un compito complicato? Ma il requisito è comune, se c'è una buona soluzione sarà grandioso – Freewind