[MySQL] PyMySQL でローカルのファイルを読み込む

IT

はじめに

本記事では PyMySQL でローカルのファイルを読み込む方法についてまとめます。

環境

DB は MySQL を使用しています。

  mysql> select version();
  +-----------+
  | version() |
  +-----------+
  | 8.0.30    |
  +-----------+

事象

with conn.cursor() as cursor:
    sql = """
    LOAD DATA LOCAL INFILE 'test.csv'
    INTO
        TABLE Sample CHARACTER
    SET
        utf8 FIELDS
        TERMINATED BY','
        OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\n'
        IGNORE 1 LINES
    ;
    """
    cursor.execute(sql)

上記のコードを実行した際に1148, 'The used command is not allowed with this MySQL version'というエラーが発生しました。
どうやらLOAD DATA LOCALコマンドはセキュリティの観点からデフォルトで無効化されているようです。
そのため、ローカルファイルを読み込む場合は明示的に有効化する必要があります。

PyMySQL を使用する場合は、connection 作成時に local_infileを設定することで有効化できます。

connection = pymysql.connect(
  host = 'localhost',
  user = 'root',
  password = 'root_password',
  database = 'testDB',
  cursorclass= pymysql.cursors.DictCursor,
  local_infile = True,
  )

おわりに

本記事では PyMySQL でローカルのファイルを読み込む方法についてまとめました。
この記事がどなたかの参考になれば幸いです。

参考

コメント