SQLAlchemy:AttributeError:'unicode'对象没有属性'_sa_instance_state'

时间:2015-08-08 13:25:27

标签: python flask sqlalchemy flask-sqlalchemy

虽然他们的修复程序没有解决我的问题,但我已经看到了其他类似错误的问题。请注意,我正在使用Flask-SQLAlchemy。

这是我的模型文件:

class subjects(db.Model):

    id = db.Column(db.Integer, primary_key=True)
    subject = db.Column(db.String(100))

class questions(db.Model):

    id = db.Column(db.Integer, primary_key=True)
    accountID = db.Column(db.Integer, db.ForeignKey('accounts.id'))
    subjectID = db.Column(db.Integer, db.ForeignKey('subjects.id'))
    subject = db.relationship('subjects')
    topic = db.Column(db.String(150), nullable=True)

如您所见,我希望questions.subject引用subjects.subject。我尝试形成一个查询:

topicList = db.session.query(questions.topic.distinct()).filter_by(subject=subjectID, accountID=accountID)

我收到一条错误,指出AttributeError: 'unicode' object has no attribute '_sa_instance_state'

此错误意味着什么以及如何修复代码以防止此错误?感谢。

1 个答案:

答案 0 :(得分:2)

您正在按subject进行过滤,但提供的是字符串而不是对象。您需要使用对象

subject = db.session.query(subjects).get(subjectID)
topicList = db.session.query(questions.topic.distinct()).filter_by(subject=subject, accountID=accountID)

或者您需要按subjectID

进行查询
topicList = db.session.query(questions.topic.distinct()).filter_by(subjectID=subjectID, accountID=accountID)

在任何一种情况下,当它应该是整数时,您似乎使用subjectID作为字符串。我不确定它是如何得到它的初始值,但你想在那里解决它。