检查.one()是否为空sqlAlchemy

时间:2014-07-27 21:48:05

标签: python sqlalchemy pyramid

我正在根据查询的其他ID运行查询。我遇到的问题是,有时查询将找不到结果。而不是让整个程序崩溃,我如何检查结果是否为None?

这是我的查询:

sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).one()

当代码执行并且没有找到结果时,我得到NoResultFound异常

NoResultFound: No row was found for one()

如果没有结果,有没有办法跳过查询?

在SO 上找到解决方案(之前找不到) Getting first row from sqlalchemy

3 个答案:

答案 0 :(得分:43)

使用first()功能代替one()。如果没有结果,它将返回None。

sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).first()

请参阅文档here

答案 1 :(得分:28)

您也可以使用one_or_none(),当找不到结果并且语法清晰度高于None时,会返回first()。无需处理错误。

参考:one_or_none()

答案 2 :(得分:9)

如果不进行查询,SQLAlchemy怎么会知道没有结果呢?

您应该捕获异常并处理它:

from sqlalchemy.orm.exc import NoResultFound

try:
    sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).one()
except NoResultFound:
    sub_report_id = []  # or however you need to handle it
相关问题