さわらブログ

さわら(@xhiroga)の技術ブログ

mysql-connector-pythonはSQLのSyntax Errorを拾ってくれない(ように見える)

いずれPR送って直したい。公式ライブラリのエラーハンドリングを疑ったことはなかったので...

TL;DR

connectionクラスでせっかく例外を投げているのに、
github.com

cursorクラスで雑なキャッチをして台無しにしている。

github.com

詳細

例えば、date型とdatetime文字列を比較しているSQLがあったとする。
クエリはprepared_statementとして処理されるので(Pythonが検証するわけでない)、MySQLからのSyntax Errorが返ってくる。

prepared_statementの生成は一応try-exceptされているが、レスポンスはサーバーから返ってきた文字列次第であるせいか?キャッチの仕方が極めて雑。
ライブラリなので標準出力もしていない。

            try:
                self._prepared = self._connection.cmd_stmt_prepare(operation)
            except errors.Error:
                self._executed = None
                raise

結果、呼び出し側でtry-exceptを忘れてしまい困ることがありました。備忘。