Проблема: AttributeError: 'str' object has no attribute '_sa_instance_state'
и я не знаю, как это исправить. Я считаю, что это связано с методами retrieve
ниже. У кого-то в Stacks была аналогичная проблема, и это было простой вопрос изменения функции... для меня это не так.
Отслеживание:
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 132, in test1
api.retrieve_assessment_result('baseball', 'Becoming a Leader')
File "/Users/ack/code/venv/NotssDB/notssdb/api/object.py", line 324, in retrieve_assessment_result
filter(Assessment_Result.owner == owner).one()
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/sql/operators.py", line 301, in __eq__
return self.operate(eq, other)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 175, in operate
return op(self.comparator, *other, **kwargs)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1011, in __eq__
other, adapt_source=self.adapter))
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1338, in _optimized_compare
state = attributes.instance_state(state)
AttributeError: 'str' object has no attribute '_sa_instance_state'
объект.py
def retrieve_assessment_result(self, *args):
id, owner, assessment = None, None, None
if len(args) == 1:
id, = args[0]
elif len(args) == 2:
owner, assessment = args
else:
raise ValueError('Value being passed is an object')
if id is not None:
return self.session.query(Assessment_Result).\
filter(Assessment_Result.id == id).one()
elif owner is not None:
print 'test1', owner
return self.session.query(Assessment_Result).\
filter(Assessment_Result.owner == owner).one()
elif assessment is not None:
print 'test2', assessment
return self.session.query(Assessment_Result).\
filter(Assessment_Result.assessment == assessment).one()
def create_category_rating(self, category_rating_int, category, assessment_result):
new_catrating = Category_Rating(category_rating_int, category, assessment_result)
self.session.add(new_catrating)
print(new_catrating)
self.session.commit()
return(new_catrating)
удобство.py (наследуется от object.py)
def create_category_rating(self, category_rating_int, category_name, username, name):
category = self.retrieve_category(category_name)
owner = self.retrieve_user(username)
assessment = self.retrieve_assessment(name)
assessment_result = self.retrieve_assessment_result(owner, assessment)
return super(ConvenienceAPI, self).create_category_rating(category_rating_int, category, assessment_result)
модель.py
class Category_Rating(Base):
__tablename__ = 'category_ratings'
id = Column(Integer, primary_key=True)
category_rating_int = Column(Integer)
category_id = Column(Integer, ForeignKey('categories.category_id'))
category = relationship('Category', backref='category_ratings')
assessment_result_id = Column(Integer, ForeignKey('assessment_results.id'))
assessment_result = relationship('Assessment_Result', backref='category_ratings')
def __init__(self, category_rating_int, category, assessment_result): #OBJECT
self.category_rating_int = category_rating_int
self.category = category
self.assessment_result = assessment_result
def __repr__(self):
return "<Category_Rating(category_rating_int='%s')>" % (self.category_rating_int)
test.py
api = ConvenienceAPI()
api.create_category_rating(2, 'Decision-Making', 'baseball', 'Becoming a Leader')
create_category_rating(...)
. - person Yaroslav Admin   schedule 02.10.2015uselist=False
. Вы должны установить один экземпляр модели, а не список, содержащий его. Скорее всего, вы делаете то же самое, когда создаете экземплярCategory_Rating
. - person Yaroslav Admin   schedule 02.10.2015