Peeweeでのデータベースマイグレーションとスキーマ変更

PeeweeはPythonでリレーショナルデータベースにアクセスするための小型で便利なORMライブラリです。この記事では、Peeweeを用いたデータベースのマイグレーションとスキーマ(スキーマとはテーブル構造などを指す)変更について解説します。具体的なコード例とその詳細な解説、そして応用例を2つ紹介します。

目次

Peeweeとは?

Peeweeは、Pythonで簡単にデータベース操作ができるORM(Object Relational Mapping)ライブラリです。シンプルで読みやすいAPIが提供されており、小規模から中規模のプロジェクトで広く使用されています。

マイグレーションの基本

データベースのマイグレーションとは、データベースのスキーマを変更するプロセスのことです。マイグレーションは、新しいフィールドの追加、既存のフィールドの削除、データ型の変更などを含みます。

Peeweeでの基本的なマイグレーション手法

Peeweeでは`SchemaMigrator`クラスを用いてマイグレーションが可能です。以下はその基本的な使い方です。

from peewee import *

db = SqliteDatabase('my_database.db')

class Person(Model):
    name = CharField()
    age = IntegerField()

    class Meta:
        database = db

# マイグレーションオブジェクトの作成
migrator = SchemaMigrator.from_database(db)

# 新しいフィールドを追加
migrator.add_column('person', 'email', CharField(null=True))

コード解説

1. 最初にPeeweeの必要なクラスとメソッドをインポートします。
2. データベース`my_database.db`を作成し、`Person`という名前のテーブルを定義します。
3. `SchemaMigrator.from_database(db)`でマイグレーションオブジェクトを作成します。
4. `add_column`メソッドで`person`テーブルに`email`フィールドを追加します。

スキーマ変更の詳細

スキーマ変更は、データベースのテーブルやカラムの構造を変更する行為です。一般には、テーブルの追加やカラムの削除、データ型の変更などがあります。

テーブルのカラム名を変更する

# カラム名の変更
migrator.rename_column('person', 'age', 'years_old')

コード解説

`rename_column`メソッドを使用して、`person`テーブルの`age`カラムを`years_old`に変更します。

応用例

例1: マイグレーションでデータの移行

# 新しいテーブルを作成
class NewPerson(Model):
    full_name = CharField()
    years_old = IntegerField()
    email = CharField()

    class Meta:
        database = db

NewPerson.create_table()

# 既存のテーブルから新しいテーブルへデータを移行
for person in Person.select():
    NewPerson.create(
        full_name=person.name,
        years_old=person.age,
        email=""
    )

コード解説

1. `NewPerson`という新しいテーブルを作成します。
2. 既存の`Person`テーブルからデータを取得し、`NewPerson`テーブルに挿入します。

例2: マイグレーションでデータ型を変更する

# ageカラムのデータ型を変更
migrator.alter_column_type('person', 'years_old', 'FloatField')

コード解説

`alter_column_type`メソッドを使用して、`person`テーブルの`years_old`カラムのデータ型を`FloatField`に変更します。

まとめ

Peeweeを用いたデータベースのマイグレーションとスキーマ変更は、比較的簡単に実装できます。ただし、これらの変更を行う前には必ずデータベースのバックアップを取ることが推奨されます。本記事で紹介した基本的な方法と応用例を参考に、効率的なデータベース管理を行ってください。

コメント

コメントする

目次