首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy one():未找到结果

SQLAlchemy one():未找到结果
EN

Stack Overflow用户
提问于 2015-10-02 14:17:47
回答 2查看 4.3K关注 0票数 3

我一直收到一个Traceback抱怨系统找不到结果。考虑到对象实际上正在经历这种情况,情况就不应该是这样了(我知道这一点,因为我有一个print命令来确认正在进行的查询)。我相信这个问题是在create_category_rating(..)的方法中发现的。

当我使用.one()时,它会抛出下面的抱怨。当我使用.all时,它返回AttributeError: 'list' object has no attribute '_sa_instance_state' (其他人有这个问题)。文档 at SQLAlchemy很好地定义了这些方法,但是由于某种原因,我的代码崩溃了。

问题:如果对象正在通过检索方法,是什么导致程序中断?在某个地方有个bug,我一直在为压扁它而挣扎。

我使用的是SQLAlchemypython2.7

回溯:

代码语言:javascript
复制
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')>

convenience.py (创建方法):

代码语言:javascript
复制
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)

object.py (检索方法):

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-02 15:52:00

你有以下几点:

代码语言:javascript
复制
self.retrieve_assessment_results(owner, assessment)

...but "retrieve_assessment_results“的参数如下(加上我的评论).

代码语言:javascript
复制
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')

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

代码语言:javascript
复制
print 'test1', owner

你会期望这个打印出类似test1 <User(...)>的东西,但是它却打印出来了.

代码语言:javascript
复制
test1 <Assessment(name='Becoming a Leader', text='better decisions')>

另外,考虑使用Python关键字参数来代替:

代码语言:javascript
复制
def retrieve_assessment_results(self, id=None, assessment=None, owner=None):
    ...

然后你的电话就变得不那么模糊了:

代码语言:javascript
复制
self.retrieve_assessment_results(owner=owner, assessment=assessment)
票数 4
EN

Stack Overflow用户

发布于 2015-10-02 14:30:12

如果结果集为空,one()将引发异常。使用first(),如果没有结果,您将得到第一个结果或Python None

关于all()也是如此,因为这个问题不包含相关的跟踪和代码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32909256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档