DB Python 開発

PythonからMySQLにinsertしようとしたら'numpy.float64' object has no attribute 'translate'になる

PythonからMySQLにinsertしようとしたら'numpy.float64' object has no attribute 'translate'になる

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できるようになる。

KRSW

駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

役に立ったらシェアしてくれると励みになります。

にほんブログ村 IT技術ブログへ

-DB, Python, 開発
-,

Translate »

© 2021 ITips