Python 如果使用DB查询未获取任何结果,如何获取错误?

Python 如果使用DB查询未获取任何结果,如何获取错误?,python,mysql,sqlalchemy,pyramid,Python,Mysql,Sqlalchemy,Pyramid,我正在努力学习和提高炼金术。今天我想了解它引发的异常 我正在从事一个基于金字塔的项目,MySQL服务器(InnoDB)和SQLAlchemy 我正在尝试排除所有错误,因为noresultfind错误不会在控制台中引发或打印。所以我除了exc.SQLAlchemyError 当我查询我的表时,没有找到任何结果,它不会升起或捕获或除其他任何内容外,并继续运行 问题: 如何查询.all()或.one()并处理 没有返回任何行的问题 如何处理其他SQL或系统相关错误?我想记录它们并观察它们以解决问题 我

我正在努力学习和提高炼金术。今天我想了解它引发的异常

我正在从事一个基于金字塔的项目,MySQL服务器(InnoDB)和SQLAlchemy

我正在尝试排除所有错误,因为
noresultfind
错误不会在控制台中引发或打印。所以我除了
exc.SQLAlchemyError

当我查询我的表时,没有找到任何结果,它不会升起或捕获或除其他任何内容外,并继续运行

问题:

  • 如何查询
    .all()
    .one()
    并处理 没有返回任何行的问题
  • 如何处理其他SQL或系统相关错误?我想记录它们并观察它们以解决问题
  • 我的代码是:

    try:
        query = Session.query(MyTable).filter(Terms.column == my_string).all()
    except exc.SQLAlchemyError, e:
        print e
        return False
    

    (我首先尝试了noresultfind,e,而不是exc.sqlalchemyrror)

    实际上,如果没有找到任何记录,此代码不会引发异常。因此,您应该抛出自己的异常:

    import logging
    try:
        records = Session.query(MyTable).\
            filter(Terms.column == my_string).all()
        if len(records) == 0:
            raise MyException('No records found')
    except MyException, e:
        logging.info('No records found')
    except exc.SQLAlchemyError, e:
        logging.exception('Some problem occurred')
    

    你好,贾斯珀,谢谢你的代码和解释。我理解您的代码,并以类似的方式修改了我的代码,以满足需要。但我不明白为什么不提出NoresultFind错误?如果在未找到结果时未引发错误,那么该错误是什么原因?没有道理。;-)<当您使用
    .one()
    而不是
    .all()
    时,会引发code>NoResultFound。传统上,数据库不认为在要求所有东西时返回空集是错误的。SQLAlchemy可以帮助您解决这个问题,并告诉您当您特别要求一条记录时有一个问题。query.all()返回一个Python列表;在那个阶段,没有count()方法。另外,如果您想说query.count(),我还建议不要同时调用count()和all()——它们都会发出SQL语句。如果您已经调用了all()并得到一个空列表(即mylist=query.all()),只需检查该列表是否为非空:“If not mylist:raise…”。Jasper,已经过了几天了,但我想说一下您的代码和解释有多大帮助。谢谢。