
SQLError
の処理は異なる
__enter__
メソッドを実行すると、
ConnectionError
と
CredentialsError
のどちらも
起こるという問題があります。
1
つでも例外が投げられると、対応する
with
文のブロックは実行さ
れません。
すべてがうまくいけば、
with
ブロックは通常どおり実行されます。
log_request
関数の下の
with
文を思い出してください。この
with
文は、(
DBcm
が提供する)
UseDatabase
コンテキストマネージャを使ってデータをデータベースに挿入します。
with UseDatabase(app.config['dbconfig']) as cursor:
_SQL = """insert into log
(phrase, letters, ip, browser_string, result
s)
values
(%s, %s, %s, %s, %s)"""
cursor.execute(_SQL, (req.form['phrase'],
req.form['letters'],
req.remote_addr,
req.user_agent.browser,
res, ))
(何らかの理由で)
SQL
クエリにエラーがあると、
MySQL Connector
モジュールはコンテキストマ
ネージャの
__enter__
メソッドで投げられる例外と同じ
ProgrammingError
となります。しか
し、この例外はコンテキストマネージャ内(つまり、 ...