0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MySQLへCSVデータをインポートする方法(Workbench & Python)

Last updated at Posted at 2025-10-14

はじめに

MySQL学習用のテストデータを作成する際の、CSVインポート方法をまとめました。

  • MySQL Workbenchでのインポート操作
  • Pythonスクリプトでの自動化

今回は、Kaggleの以下のデータセットを使用します。

CSV1行目にカラム名が含まれているため、テーブル定義を事前に作成する必要はありません

方法1: MySQL Workbenchでインポート

1. スキーマ作成

左側のSCHEMASエリアで右クリック → 「Create Schema...」を選択
スキーマ名: gym_member_info

2.png

2. CSVインポート

作成したスキーマを右クリック → 「Table Data Import Wizard」を選択

4.png

CSVファイルのパスを指定します。

3. テーブル名設定

「Create new table」を選択し、テーブル名を入力
テーブル名: gym_membership

5.png

4. カラム定義の確認

データ型が自動判定されます。問題なければ「Next」

6.png

5. インポート完了

以下のSQLでデータを確認します。

SELECT * FROM gym_member_info.gym_membership;

7.png

方法2: Pythonスクリプトで自動化

複数のCSVファイルを扱う場合や、処理を再現可能にしたい場合はPythonが便利です。

環境準備

必要なライブラリのインストール

pip install pandas sqlalchemy pymysql

インストール確認

pip list

以下のライブラリが表示されればOK

  • pandas
  • sqlalchemy
  • pymysql

各ライブラリの役割

ライブラリ 役割 主な機能
pandas データ操作 CSVの読み込み、データ加工、SQLへの書き込み
sqlalchemy DB接続管理 統一的なデータベース接続インターフェース
pymysql MySQL通信ドライバ PythonとMySQLの実際の通信を担当

1. pandas の主な機能

CSVファイルの読み込み

df = pd.read_csv(csv_file, encoding='utf-8')

データの確認

len(df)                # 行数取得
df.columns.tolist()    # カラム名のリスト取得
df.head()              # 先頭5行取得

SQLへのデータ書き込み

df.to_sql(name=table_name, con=engine, ...)

この1行でCREATE TABLEとINSERT文を自動実行してくれます。

2. sqlalchemy の主な機能

データベース接続エンジンの作成

from sqlalchemy import create_engine
engine = create_engine(connection_string)

pandasのto_sql()はSQLAlchemyのengineを必要とします。

df.to_sql(con=engine, ...)  # ← engineが必要

3. pymysql の役割

接続文字列でドライバを指定

connection_string = f'mysql+pymysql://{username}:{password}@...'
                           # ↑ pymysqlを使用することを指定

MySQLとの実際の通信プロトコルを提供します。

Pythonスクリプトの実装

ディレクトリ構成

C:\mysql_import\
  ├── import_csv.py     # これから作成するスクリプト
  └── gym_membership.csv # インポートするCSVファイル

スクリプト全体

import pandas as pd
from sqlalchemy import create_engine

# ===== 環境に合わせて変更 =====
# CSVファイルのパス
csv_file = 'gym_membership.csv'

# テーブル名
table_name = 'gym_membership'

# MySQL接続情報
username = 'root'
password = 'your_password'  # 実際のパスワードに変更
host = 'localhost'
port = 3306
database = 'gym_member_info'  # 使用するデータベース名
# ============================

try:
    # 1. CSVファイルを読み込む
    print(f"CSVファイルを読み込んでいます: {csv_file}")
    df = pd.read_csv(csv_file, encoding='utf-8')
    
    # 2. データの確認
    print(f"\n✓ 読み込み完了: {len(df)}行, {len(df.columns)}")
    print("\nカラム一覧:")
    print(df.columns.tolist())
    print("\nデータの先頭5行:")
    print(df.head())
    
    # 3. MySQL接続エンジンの作成
    print(f"\nMySQLに接続しています...")
    connection_string = f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}'
    engine = create_engine(connection_string)
    
    # 4. テーブル作成とデータインポート
    print(f"\nテーブル '{table_name}' を作成し、データをインポートしています...")
    df.to_sql(
        name=table_name,
        con=engine,
        if_exists='replace',  # 既存テーブルがあれば置き換え
        index=False,          # DataFrameのインデックスを含めない
        chunksize=1000        # 1000行ずつ分割してインサート
    )
    
    print(f"\n✓ 完了しました!")
    print(f"  テーブル名: {table_name}")
    print(f"  インポート行数: {len(df)}")
    
except FileNotFoundError:
    print(f"\n✗ エラー: ファイル '{csv_file}' が見つかりません")
    print("CSVファイルがスクリプトと同じフォルダにあるか確認してください")
    
except Exception as e:
    print(f"\n✗ エラーが発生しました: {str(e)}")
    print("\n接続情報を確認してください:")
    print(f"  ユーザー名: {username}")
    print(f"  ホスト: {host}")
    print(f"  データベース: {database}")

スクリプトの実行

cd C:\mysql_import
python import_csv.py

実行結果の例

CSVファイルを読み込んでいます: gym_membership.csv

✓ 読み込み完了: 1000行, 8列

カラム一覧:
['member_id', 'name', 'age', 'gender', 'join_date', 'membership_type', 'monthly_fee', 'status']

データの先頭5行:
   member_id        name  age gender   join_date membership_type  monthly_fee status
0          1  John Smith   28      M  2024-01-15         Premium         5000 Active
...

MySQLに接続しています...

テーブル 'gym_membership' を作成し、データをインポートしています...

✓ 完了しました!
  テーブル名: gym_membership
  インポート行数: 1000行

まとめ

方法 メリット デメリット
Workbench GUIで直感的、初心者向け 手動操作、複数ファイルは大変
Python 自動化可能、再現性が高い、複数ファイル対応 初期設定が必要

おすすめの使い分け:

  • 1〜2個のCSV: Workbenchが簡単
  • 複数のCSV: Pythonで自動化
  • 定期的にインポート: Pythonスクリプト化

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?