Query / Filter方法导致NameError

时间:2015-09-01 15:44:31

标签: python debugging sqlalchemy traceback

我有一张表与各自的ForeignKeys有两个(M-1)关系。我想验证ids是否匹配。我试图比较ID并接收:history.pushState(null, null, href);

我不确定为什么会出现这个问题。我不确定每个SQLAlchemy文档是否应该使用NameError: global name 'owner_id' is not defined方法,但它在表中。致电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

这是cat_rating:

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)

错误:

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)    

1 个答案:

答案 0 :(得分:1)

问题在于这一行......

filter(Assessment_Results.id == owner_id).\

owner_id未在此方法中定义,并且未作为Assessment_Results对象的属性进行访问,因此解释器不知道您尝试通过此名称引用的对象。

我想你可能想做

filter(Assessment_Results.owner_id == owner.id).\

但是假设所有者是所有者模型的实例。

一旦你找出你想用于owner_id的变量,你最终会遇到与assessment_id相同的问题(因为它也没有在方法中定义)。