gpt4 book ai didi

python - SQLAlchemy 一个(): No Results Found

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:10 44 4
gpt4 key购买 nike

我不断收到 Traceback 提示系统找不到结果。鉴于对象实际上正在经历,情况不应该如此(我知道这一点,因为我有一个打印命令来确认查询正在经历什么)。我相信问题出在 create_category_rating(..) 方法中。

当我使用 .one() 时,它会引发下面的投诉。当我使用 .all 时,它返回 AttributeError: 'list' object has no attribute '_sa_instance_state' (其他人有这个 issue )。 docs SQLAlchemy 很好地定义了这些方法,但由于某种原因我的代码崩溃了。

问题:如果对象正在通过检索方法,是什么导致程序中断?某处有一个错误,我一直在努力解决它。

我正在使用 SQLAlchemypython2.7:

回溯:

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 111, in test1
api.create_category_rating(2, 'Decision-Making', 'baseball', 'Becoming a Leader')
File "/Users/ack/code/venv/NotssDB/notssdb/api/convenience.py", line 41, in create_category_rating
assessment_results = self.retrieve_assessment_results(owner, assessment)
File "/Users/ack/code/venv/NotssDB/notssdb/api/object.py", line 324, in retrieve_assessment_results
filter(Assessment_Results.owner == owner).one()
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2478, in one
raise orm_exc.NoResultFound("No row was found for one()")
NoResultFound: No row was found for one()
# output from Traceback
Decision-Making
baseball
Becoming a Leader
Becoming a Leader
test1 <Assessment(name='Becoming a Leader', text='better decisions')>

便利.py(创建方法):

def create_category_rating(self, category_rating_int, category_name, username, name):
category = self.retrieve_category(category_name)
owner = self.retrieve_user(username) # added
assessment = self.retrieve_assessment(name) #added
assessment_results = self.retrieve_assessment_results(owner, assessment)
return super(ConvenienceAPI, self).create_category_rating(category_rating_int, category, assessment_results)

对象.py(检索方法):

def retrieve_assessment_results(self, *args):
id, assessment, owner = None, None, None
if len(args) == 1:
id, = args[0]
elif len(args) == 2:
assessment, owner = args
else:
raise ValueError('Value being passed is an object')
if id is not None:
return self.session.query(Assessment_Results).\
filter(Assessment_Results.id == id).one()
elif owner is not None:
print 'test1', owner
return self.session.query(Assessment_Results).\
filter(Assessment_Results.owner == owner).one()
elif assessment is not None:
print 'test2', assessment
return self.session.query(Assessment_Results).\
filter(Assessment_Results.assessment == assessment).one()

最佳答案

您有以下内容:

self.retrieve_assessment_results(owner, assessment)

...但是“retrieve_assessment_results”的参数如下(添加了我的评论)...

def retrieve_assessment_results(self, *args):
id, assessment, owner = None, None, None
if len(args) == 1:
id, = args[0]
elif len(args) == 2:
assessment, owner = args # Note this line!
else:
raise ValueError('Value being passed is an object')

你通过了所有者,然后是评估。但是如果你检测到两个对象,你会读评估,然后是所有者。换句话说,您正在使用一种对象顺序调用该方法,并假设相反的顺序进行检索。您甚至可以在调试行中看到这种情况:

print 'test1', owner

你会期望这会打印类似 test1 <User(...)> 的内容, 但它打印了...

test1 <Assessment(name='Becoming a Leader', text='better decisions')>

另外,考虑使用 Python keyword arguments相反:

def retrieve_assessment_results(self, id=None, assessment=None, owner=None):
...

然后你的电话就变得不那么模棱两可了:

self.retrieve_assessment_results(owner=owner, assessment=assessment)

关于python - SQLAlchemy 一个(): No Results Found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32909256/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com