SqlalchemyからMYSQLに日本語文字列がINSERTできない時の解決法について紹介したいと思います。
エラー内容
エラーがでたプログラムは以下のような感じでdf.to_sql()で日本語を含むデータフレームをテーブルに追加しようとしたところエラーが起こりました
<エラーが出たコード>
import sqlalchemy import pandas as pd ~~~~ #アクセス先の指定&エンジン設定 url = f'mysql://{db_user}:{db_pass}@{instance_ip}/{db_name}?charset=utf8' engine = sqlalchemy.create_engine(url, echo=True) # データフレームを指定したDBに新規テーブルとして追加する df.to_sql("table_name", engine, index=None)
関連記事:【Python】SqlAlchemyでCloudSQLにデータフレームをテーブル保存する
<エラーメッセージ>
sqlalchemy.exc.DataError: (pymysql.err.DataError) (1366, “Incorrect string value…
DBに追加しようとしている日本語データに不適切な文字列があるとのことらしいです
解決法
解決法としてはdf.to_sql()に「convert_unicode=True」という引数を加えることで解決しました。
df.to_sql("table_name", engine,convert_unicode=True, index=None)
これでダメな場合はデータベース側の文字コード設定を「utf8mb4」に変更してみてください
MYSQLのデータベースの文字コードについては以下を参照してください
https://dev83.com/mysql-insertinto-error/
まとめ
解決法としては以下の2つかなと思います
①引数engine,convert_unicode=Trueを追加する
②データベース側の文字コード設定を「utf8mb4」に変更する
では~
コメント
[…] 関連記事:SqlalchemyからMYSQLに日本語文字列がINSERTできない時の解決法 […]