导致NameError的查询/过滤方法



我有一个表,与各自的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使用什么变量

最新更新