Algunos problemas con MapperExtension of sqlalchemy
Hay dos clases: usuario y pregunta
Un usuario puede tener muchas preguntas, y también contiene un número de preguntas para registrar el recuento de preguntas que le pertenecen.
Entonces, cuando agrego una nueva pregunta, quiero actualizar el número de preguntas del usuario. Al principio, hago lo siguiente:
question = Question(title='aaa', content='bbb')
Session.add(question)
Session.flush()
user = question.user
### user is not None
user.question_count += 1
Session.commit()
Todo va bien.
Pero no quiero usar la devolución de llamada de eventos para hacer lo mismo. Como sigue:
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 en el método "after_insert":
instance.user # -> Get None!!!
¿Por qué?
Si cambio esa línea a:
Session.query(User).filter_by(id=instance.user_id).one()
Puedo obtener el usuario con éxito, pero: ¡el usuario no puede actualizarse!
Mira, he modificado el usuario:
user.question_count += 1
Pero no hay ninguna 'actualización' sql impresa en la consola, y elquestion_count
No se actualizan.
Trato de agregarSession.flush()
oSession.commit()
en elafter_insert()
método, pero ambos causan errores.
¿Hay algo importante que me falta? Por favor ayudame, gracias