PythonからMySQLにinsertしようとしたら
'numpy.float64' object has no attribute 'translate'
のエラーが発生してinsertできない。
恐らく多くのPythonユーザーが直面したであろうこの問題。
今回はこのエラーの原因と対処法の1つを紹介する。
エラー原因
エラー原因は変数の型が合っていない事。
エラーメッセージ 'numpy.float64' object has no attribute 'translate'
を訳すと 'numpy.float64' オブジェクトは'translate'のattributeを持ってないよ
となる。
つまり通常はPythonの変数型を 'translate'
によってMySQL側に合わせてからinsertしているが、numpy.float64
型は'translate'
する機能が無い(MySQLとの互換性がない)のでinsertできなかった、ということになる。
参考ページ
mysql.connector-pythonはどうもnumpy.float形式やtimestamp形式をinsertしてくれないようで
【メモ】mysql.connector-python を用いたときにpython floatがInsertできないといわれた時の方法 - Qiita
エンコーダは、入力が実際の文字列であると仮定すると、この文字列にtranslate()メソッドを呼び出そう。しかし、このメソッドはfloat64では定義されていないため、このエラーが発生します。
'numpy.float64'オブジェクトに 'translate'属性がありませんPythonでMysqlに値を挿入
対処法
粗い対処方法だが「文字列型に変換してからinsertする」という方法がある。
timestampなどの時間系は
[変数].strftime("%Y-%m-%d")
numpy.float64などの数値系は
str([変数])
で文字列に変換することで、MySQLにinsertできるようになる。