SQLAlchemy AttributeError: 'Query' objet n'a pas d'attribut "_sa_instance_state' lors de la récupération de la base de données
Le problème est d'essayer de récupérer un objet avec des relations de la base de données à l'aide de SQLAlchemy sur la Pyramide. Ce que je veux, fondamentalement, est de créer les objets que j'ai besoin de récupérer à partir de la base de données pour compléter les données nécessaires à une page web.
Lorsque j'essaie d'accéder à l'url /sondage/{id} (à l'aide d'un valide poll id, par exemple: /sondage/1) pour obtenir la page, j'obtiens cette erreur: AttributeError: 'Query' objet n'a pas d'attribut "_sa_instance_state'. Quelle est l'erreur?
C'est la partie pertinente du modèle:
class Question(Base):
__tablename__ = 'question'
id = Column(Integer, primary_key=True)
text = Column(String(250))
type_id = Column(Integer, ForeignKey('type.id'))
type = relationship(Type)
poll_id = Column(Integer, ForeignKey('poll.id'))
poll = relationship(Poll)
def __init__(self, text, type, poll):
self.text = text
self.type = type
self.poll = poll
class Option(Base):
__tablename__ = 'option'
id = Column(Integer, primary_key=True)
text = Column(String(250))
question_id = Column(Integer, ForeignKey('question.id'))
question = relationship(Question)
def __init__(self, text, question):
self.text = text
self.question = question
C'est la partie du code qui me donne de la difficulté. Le débogueur points lors de la deuxième à la dernière ligne (l'Option de l'objet).
if request.matchdict['id'] != None:
pinst = session.query(Poll).get(request.matchdict['id'])
typeq = session.query(Type).first()
qinst = session.query(Question).filter_by(poll=pinst)
lopt = session.query(Option).filter_by(question=qinst)
return {'question':qinst, 'arroptions':lopt, 'type':typeq}
Merci d'avance!
Vous devez vous connecter pour publier un commentaire.
qinst
est unQuery
, pas unQuestion
. Vous voulez probablement:ou
Vous pouvez également ajouter une backref sur
Question
de sorte que vous pouvez aller à partir dePoll
àQuestion
: