Pythonを使ってMySQLデータのマイグレーションと変換を行う方法

この記事では、Pythonを使用してMySQLデータベースのデータマイグレーションとデータ変換を行う具体的な手法について解説します。具体的なコード例、その詳細な解説、および応用例を含めています。

目次

はじめに

データベースのマイグレーションとは、一つのデータベースから別のデータベースへデータを移行するプロセスです。一方、データ変換とは、データの形式を変更することを指します。PythonとMySQLを組み合わせれば、この二つのプロセスを効率的に実行できます。

必要なパッケージ

このプロジェクトで使用する主要なPythonパッケージは、`pymysql`です。

# パッケージのインストール
pip install pymysql

MySQLに接続する基本的なPythonコード

まずは、PythonでMySQLに接続する基本的なコードから見ていきましょう。

# 必要なモジュールをインポート
import pymysql

# MySQLに接続
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='password',
                             database='test_db')

# 接続を閉じる
connection.close()

コードの説明

– `host`: MySQLサーバーのアドレス
– `user`: MySQLのユーザー名
– `password`: MySQLのパスワード
– `database`: 使用するデータベース名

データのマイグレーション

次に、データのマイグレーションに必要なPythonコードを見ていきましょう。

# データのマイグレーション
import pymysql

# 接続設定
source_db_config = {
    'host': 'localhost',
    'user': 'root',
    'password': 'password',
    'database': 'source_db'
}

target_db_config = {
    'host': 'localhost',
    'user': 'root',
    'password': 'password',
    'database': 'target_db'
}

# Source DBからデータを取得
source_conn = pymysql.connect(**source_db_config)
source_cursor = source_conn.cursor()
source_cursor.execute("SELECT * FROM source_table")
source_data = source_cursor.fetchall()

# Target DBにデータを挿入
target_conn = pymysql.connect(**target_db_config)
target_cursor = target_conn.cursor()
for row in source_data:
    target_cursor.execute("INSERT INTO target_table VALUES (%s, %s, %s)", row)

# コミットと接続解除
target_conn.commit()
source_conn.close()
target_conn.close()

コードの説明

– `source_db_config`と`target_db_config`: 接続先のデータベース情報を格納する辞書。
– `source_cursor.execute(“SELECT * FROM source_table”)`: Source DBから全データを取得。
– `target_cursor.execute(“INSERT INTO target_table VALUES (%s, %s, %s)”, row)`: Target DBにデータを挿入。

データ変換の基本

データ変換には、`str.upper()`や`int()`などのPythonの基本的な関数がよく使われます。

# 文字列を大文字に変換
upper_str = "hello".upper()

# 数値を文字列に変換
str_num = str(123)

# 文字列を整数に変換
int_str = int("123")

応用例1:データのフィルタリングと変換

次に、特定の条件でデータをフィルタリングしながら、データの形式も変換する例です。

# 応用例1のコード
import pymysql

# データベースに接続
conn = pymysql.connect(host='localhost',
                       user='root',
                       password='password',
                       database='test_db')
cursor = conn.cursor()

# データを取得してフィルタリングと変換
cursor.execute("SELECT name, age FROM users")
data = cursor.fetchall()
filtered_data = [(name.upper(), age * 2) for name, age in data if age > 20]

# コミットと接続解除
conn.commit()
conn.close()

応用例2:データ同期ツール

2つの異なるデータベース間でデータを同期するツールを作成する例です。

# 応用例2のコード
import pymysql
import time

# 接続設定
db1_config = {'host': 'localhost', 'user': 'root', 'password': 'password', 'database': 'db1'}
db2_config = {'host': 'localhost', 'user': 'root', 'password': 'password', 'database': 'db2'}

while True:
    # DB1からデータを取得
    conn1 = pymysql.connect(**db1_config)
    cursor1 = conn1.cursor()
    cursor1.execute("SELECT * FROM table1")
    data1 = cursor1.fetchall()

    # DB2にデータを挿入
    conn2 = pymysql.connect(**db2_config)
    cursor2 = conn2.cursor()
    for row in data1:
        cursor2.execute("REPLACE INTO table2 VALUES (%s, %s, %s)", row)

    # コミットと接続解除
    conn2.commit()
   

 conn1.close()
    conn2.close()

    # 1分間隔でループ
    time.sleep(60)

まとめ

Pythonを使ってMySQLデータのマイグレーションと変換を行う方法について、基本的な接続方法から応用例まで詳細に解説しました。これらのコードはあくまで例ですので、必要に応じてカスタマイズが可能です。

コメント

コメントする

目次