Django フレームワークでのデータ移行スキル (パート 2)

WBOY
リリース: 2023-06-17 19:27:06
オリジナル
1277 人が閲覧しました

最初のパートでは、Django フレームワークでのデータ移行の基本概念と、移行を作成して適用する方法を紹介しました。この記事では、データ移行テクニックを使用していくつかの一般的な問題を解決する方法について詳しく説明します。

  1. モデル フィールドの追加、削除、または変更

モデルを作成した後、フィールドの追加、削除、変更などの変更が必要になる場合があります。 Django では、これは移行を作成することで実現されます。次のモデルがあるとします。

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()

    def __str__(self):
        return f"{self.first_name} {self.last_name}"
ログイン後にコピー

次に、人物の年齢を表す年齢フィールドを人物モデルに追加します。次のコマンドを実行できます。

python manage.py makemigrations --name add_age_field persons
ログイン後にコピー

これにより、年齢フィールドを追加する操作を含む新しい移行ファイルが作成されます。移行ファイル内のアクションを手動で編集できます:

from django.db import migrations, models

class Migration(migrations.Migration):

    dependencies = [
        ('persons', '0001_initial'),
    ]

    operations = [
        migrations.AddField(
            model_name='person',
            name='age',
            field=models.IntegerField(null=True),
        ),
    ]
ログイン後にコピー

次に、新しい移行を適用します:

python manage.py migrate persons
ログイン後にコピー
ログイン後にコピー

これで、人物モデルに年齢フィールドが追加されます。

フィールドを削除または変更する場合は、対応する操作を移行ファイルに追加できます。

  1. 移行のマージ

移行ファイルを変更する必要がある場合、複数の移行ファイルをマージする必要がある場合があります。 Django は、移行ファイルの名前の順序に基づいて操作を順番に実行します。したがって、以前の移行ファイルが変更された場合は、後続のすべての移行ファイルを再生成する必要があります。大規模なプロジェクトでは再生成が必要な移行ファイルが多数存在する可能性があるため、これは面倒です。この問題を解決するには、「マージ マイグレーション」手法を使用できます。

まず、新しい移行ファイルを作成し、マージするすべての移行ファイルをファイル内の依存関係に追加する必要があります。 0001_initial と 0002_add_age_field という 2 つの移行ファイルがあり、これら 2 つの移行ファイルを 1 つの移行ファイルにマージするとします。次のコマンドを実行できます:

python manage.py makemigrations --name merge persons --merge 0001_initial 0002_add_age_field
ログイン後にコピー

これにより、0001_initial から 0002_add_age_field までのすべての操作を含む新しい移行ファイルが作成されます。このファイルを手動で編集して、動作を確認または変更できます。次に、新しい移行を適用します。

  1. データ移行のバグ修正

データ移行プロセス中に、エラーが発生することがあります。たとえば、一部の操作が失敗したり、一部の操作によってデータが失われる可能性があります。これらの問題を解決するには、「パッチ移行」技術を使用できます。

パッチ移行は通常の移行と似ていますが、通常のように移行ファイルを作成せず、データベースを直接変更します。移行ファイルを適用し、そのファイルにバグがあるとします。ここで、このバグを修正したいと考えていますが、新しい移行ファイルは作成したくありません。次のコマンドを実行できます:

python manage.py migrate persons 0002_patch
ログイン後にコピー

これにより、0002_patch という新しい移行が実行されます。この移行に修復アクションを追加できます。これらの操作では、新しい移行ファイルを作成するのではなく、データベースが直接変更されます。

  1. データ移行を使用してデータを再ロードする

場合によっては、データをデータベースに再ロードする必要があります。たとえば、データベースをデバッグするときに、データベースをリセットしてテスト データを再ロードすることが必要になる場合があります。この目標を達成するには、「データ移行」技術を使用できます。

まず、新しい移行ファイルを作成し、そのファイルにいくつかの操作を追加して、データをデータベースにロードする必要があります。データベースに追加するデータを含む json ファイルがあるとします。

[
    {
        "first_name": "John",
        "last_name": "Doe",
        "email": "johndoe@example.com",
        "age": 30
    },
    {
        "first_name": "Jane",
        "last_name": "Doe",
        "email": "janedoe@example.com",
        "age": 25
    }
]
ログイン後にコピー

これらのオブジェクトを移行ファイルに作成し、データベースに追加できます。

from django.core.management import call_command
from django.db import migrations
from persons.models import Person
import json

def load_data(apps, schema_editor):
    filename = 'path/to/data.json'
    with open(filename) as file:
        data = json.load(file)
        for item in data:
            Person.objects.create(**item)

class Migration(migrations.Migration):

    dependencies = [
        ('persons', '0002_add_age_field'),
    ]

    operations = [
        migrations.RunPython(load_data),
    ]
ログイン後にコピー

これで、次のことが可能になります。次のコマンドを実行して、データをデータベースにロードします:

python manage.py migrate persons
ログイン後にコピー
ログイン後にコピー

これにより、新しい移行ファイルが適用され、データベースにデータが追加されます。

概要

Django のデータ移行スキルを使用すると、データベースをより適切に管理できます。モデルフィールドの追加、削除、変更、移行ファイルのマージ、移行エラーの修正、データのリロードを行うことができます。これらの手法を理解すると、複雑なデータベース操作を簡単に処理できるようになります。

以上がDjango フレームワークでのデータ移行スキル (パート 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート