我有一个表,与各自的foreignkey有两个(M-1)关系。我想验证id是否匹配。我试图比较id并收到:NameError: global name 'owner_id' is not defined
我不确定为什么会出现这个问题。我不确定是否应该在每个SQLAlchemy文档中使用join
方法,但它在表中。呼叫self.
也不工作
表是:
class Assessment_Results(Base):
__tablename__ = 'assessment_results'
id = Column(Integer, primary_key=True)
created_on = Column(DateTime, default=datetime.utcnow)
owner_id = Column(Integer, ForeignKey('users.user_id'))
owner = relationship('User', backref='assessment_results')
assessment_id = Column(Integer, ForeignKey('assessments.assessment_id'))
assessment = relationship('Assessment', backref='assessment_results')
def __init__(self, owner, assessment):
self.owner = owner
self.assessment = assessment
查询:
def retrieve_assessment_results(self, owner, assessment):
assess_results = self.session.query(Assessment_Results).
filter(Assessment_Results.id == owner_id).
filter(Assessment_Results.id == assessment_id).all()
return assess_results
整个追溯:
ERROR: notssdb.test.test.test1
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/Users/ack/code/venv/NotssDB/notssdb/test/test.py", line 86, in test1
api.create_category_rating(2, 'Decision-Making', 'baseball', 'Becoming a Leader')
File "/Users/ack/code/venv/NotssDB/notssdb/api/convenience.py", line 29, in create_category_rating
assessment_results = self.retrieve_assessment_results(owner, assessment)
File "/Users/ack/code/venv/NotssDB/notssdb/api/object.py", line 273, in retrieve_assessment_results
filter(Assessment_Results.id == owner_id).
NameError: global name 'owner_id' is not defined
新实现后的新回溯错误:
def retrieve_assessment_results(self, owner, assessment):
assess_results = self.session.query(Assessment_Results).
filter(Assessment_Results.owner_id == owner.id).
filter(Assessment_Results.assessment_id == assessment.id).all()
return assess_results
上述方法的继承类:
def create_assessment_results(self, username, name):
owner = self.retrieve_user(username)
assessment = self.retrieve_assessment(name)
return super(ConvenienceAPI, self).create_assessment_results(owner, assessment)
这里是cat_rating:
def create_category_rating(self, category_rating_int, category_name, owner, assessment):
category = self.retrieve_category(category_name)
assessment_results = self.retrieve_assessment_results(owner, assessment)
return super(ConvenienceAPI, self).create_category_rating(category_rating_int, category, assessment_results)
错误:Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/Users/ack/code/venv/NotssDB/notssdb/test/test.py", line 86, in test1
api.create_category_rating(2, 'Decision-Making', 'baseball', 'Becoming a Leader')
File "/Users/ack/code/venv/NotssDB/notssdb/api/convenience.py", line 29, in create_category_rating
assessment_results = self.retrieve_assessment_results(owner, assessment)
File "/Users/ack/code/venv/NotssDB/notssdb/api/object.py", line 272, in retrieve_assessment_results
filter(Assessment_Results.owner_id == owner.id).
AttributeError: 'str' object has no attribute 'id'
问题出在这一行…
filter(Assessment_Results.id == owner_id).
owner_id没有在这个方法中定义,也没有作为一个Assessment_Results对象的属性被访问,所以解释器不知道你试图通过这个名字引用什么对象。
我想你可能想做
filter(Assessment_Results.owner_id == owner.id).
但是假设owner是owner模型的一个实例
你最终会有相同的问题与assessment_id(因为它也没有在方法中定义),一旦你弄清楚你的意思是为owner_id使用什么变量