3

私は SQLAlchemy を学び、進歩しようとしています。今日は、発生する例外について学びたいと思いました。

私は Pyramid ベースのプロジェクト、MySQL サーバー (InnoDB)、および SQLAlchemy に取り組んでいます。

NoResultFoundエラーが発生したり、コンソールに出力されたりしないため、すべてのエラーを除外しようとしています。だから私は例外exc.SQLAlchemyErrorです。

テーブルにクエリを実行して結果が見つからない場合、テーブルは何も発生させたり、キャッチしたり、除外したりせず、動作を続けます。

質問:

  1. .all()または.one()に対してクエリを実行し、行が返されないという問題に対処するにはどうすればよいですか?
  2. 他の SQL またはシステム関連のエラーにはどのように対処すればよいですか? それらを記録し、観察して問題を修正したいと思います。

私のコードは次のとおりです。

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

(exc.SQLAlchemyError の代わりに、最初に NoResultFound を試しました。)

4

1 に答える 1

8

実際、レコードが見つからない場合、このコードは例外を発生させません。したがって、代わりに独自の例外をスローする必要があります。

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')
于 2012-10-11T15:54:55.457 に答える