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 Pyramid. Ce que je veux essentiellement, c'est créer les objets dont j'ai besoin de récupérer dans la base de données pour compléter les données nécessaires pour une page web. Lorsque j'essaie d'accéder à l'url/poll/{id} (en utilisant un identifiant d'interrogation valide, par exemple:/poll/1) pour obtenir la page, j'obtiens cette erreur: AttributeError: l'objet 'Query' n'a aucun attribut '_sa_instance_state'. Quelle est l'erreur?SQLAlchemy AttributeError: l'objet 'Query' n'a pas d'attribut '_sa_instance_state' lors de la récupération de la base de données
Ceci 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
Celui-ci est la partie du code qui me donne du mal. Le débogueur pointe sur l'avant-dernière ligne (l'objet Option).
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!
Je viens de comprendre la .one() ou première chose() mais je suis heureux pour la clarification approfondie. Il semble beaucoup mieux d'utiliser le backref. – ffuentes