Hay dos clases: de usuario y la preguntaAlgunos problemas con MapperExtension de sqlalchemy
Un usuario puede tener muchas preguntas, y también contiene un question_count para grabar el conde de preguntas pertenecen a él.
Por lo tanto, cuando agregue una nueva pregunta, quiero actualizar el número de pregunta del usuario . Al principio, hago como:
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 eventos por evento para hacer lo mismo. Como siguiente:
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 a esa línea:
Session.query(User).filter_by(id=instance.user_id).one()
puedo conseguir el usuario correctamente, pero: el usuario no puede actualizarse!
Look Me han modificado el usuario:
user.question_count += 1
Pero no hay sql 'actualización' impreso en la consola, y la
question_count
no se actualizan.intento agregar
Session.flush()
oSession.commit()
en el métodoafter_insert()
, pero ambos causan errores.
¿Hay algo importante que me falta? Por favor, ayúdenme, gracias
gracias. Entonces, ¿es una tarea complicada? Pero el requisito es común, si hay una buena solución, será genial – Freewind