Dalam bahagian pertama, kami memperkenalkan konsep asas pemindahan data dalam rangka kerja Django dan cara membuat dan menggunakan migrasi. Artikel ini mendalami cara menggunakan teknik pemindahan data untuk menyelesaikan beberapa masalah biasa.
Selepas anda mencipta model, kadangkala anda perlu membuat perubahan padanya, seperti menambah, memadam atau mengubah suai medan . Di Django, ini dicapai dengan mencipta migrasi. Katakan kita mempunyai model berikut:
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}"
Sekarang, kita mahu menambah medan umur pada model Orang untuk mewakili umur orang itu. Kita boleh melaksanakan arahan berikut:
python manage.py makemigrations --name add_age_field persons
Ini akan mencipta fail migrasi baharu yang akan mengandungi tindakan menambah medan umur. Kami boleh mengedit tindakan secara manual dalam fail migrasi:
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), ), ]
dan kemudian menggunakan migrasi baharu:
python manage.py migrate persons
Kini akan terdapat medan umur dalam model Orang.
Jika anda ingin memadam atau mengubah suai medan, anda boleh menambah operasi yang sepadan pada fail migrasi.
Apabila fail migrasi perlu diubah suai, berbilang fail migrasi mungkin perlu digabungkan. Django akan melaksanakan operasi secara berurutan berdasarkan susunan nama fail migrasi. Oleh itu, jika fail migrasi sebelumnya diubah suai, semua fail migrasi berikutnya perlu dijana semula. Ini menyusahkan kerana dalam projek besar mungkin terdapat banyak fail migrasi yang perlu dijana semula. Untuk menyelesaikan masalah ini, kita boleh menggunakan teknik "merge migration".
Mula-mula, kita perlu mencipta fail migrasi baharu, dan kemudian tambah semua fail migrasi untuk digabungkan kepada kebergantungan dalam fail ini. Katakan kami mempunyai dua fail migrasi: 0001_initial dan 0002_add_age_field, dan kami kini ingin menggabungkan kedua-dua fail migrasi ini ke dalam satu fail migrasi. Kita boleh melaksanakan arahan berikut:
python manage.py makemigrations --name merge persons --merge 0001_initial 0002_add_age_field
Ini akan mencipta fail migrasi baharu yang akan mengandungi segala-galanya daripada 0001_initial hingga 0002_add_age_field. Kami boleh mengedit fail ini secara manual untuk menyemak atau mengubah suai operasi. Kemudian, gunakan penghijrahan baharu.
Semasa proses pemindahan data, kadangkala beberapa ralat mungkin berlaku. Sebagai contoh, beberapa operasi mungkin terlepas, atau beberapa operasi mungkin mengakibatkan kehilangan data. Untuk menyelesaikan masalah ini, kita boleh menggunakan teknik "patch migration".
Penghijrahan patch adalah serupa dengan penghijrahan biasa, tetapi bukannya mencipta fail migrasi seperti biasa, ia mengubah suai pangkalan data secara langsung. Katakan kami telah menggunakan fail migrasi dan terdapat pepijat dalam fail. Sekarang, kami ingin membetulkan pepijat ini, tetapi kami tidak mahu mencipta fail migrasi baharu. Kita boleh melaksanakan arahan berikut:
python manage.py migrate persons 0002_patch
Ini akan melaksanakan migrasi baharu yang dipanggil 0002_patch. Kami boleh menambah tindakan pembaikan pada migrasi ini. Operasi ini akan mengubah suai pangkalan data secara langsung dan bukannya mencipta fail migrasi baharu.
Dalam sesetengah kes, kami perlu memuatkan semula data ke dalam pangkalan data. Sebagai contoh, apabila menyahpepijat pangkalan data, kami mungkin mahu menetapkan semula pangkalan data dan memuat semula data ujian. Untuk mencapai matlamat ini, kita boleh menggunakan teknik "penghijrahan data".
Pertama, kita perlu mencipta fail migrasi baharu dan menambah beberapa operasi pada fail untuk memuatkan data ke dalam pangkalan data. Katakan kita mempunyai fail json yang mengandungi data untuk ditambahkan pada pangkalan data:
[ { "first_name": "John", "last_name": "Doe", "email": "johndoe@example.com", "age": 30 }, { "first_name": "Jane", "last_name": "Doe", "email": "janedoe@example.com", "age": 25 } ]
Kita boleh mencipta objek ini dalam fail migrasi dan menambahnya pada pangkalan data:
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), ]
Sekarang, kita boleh laksanakan arahan berikut untuk memuatkan data ke dalam pangkalan data:
python manage.py migrate persons
Ini akan menggunakan fail migrasi baharu dan menambah data pada pangkalan data.
Ringkasan
Menggunakan kemahiran pemindahan data Django boleh membantu kami mengurus pangkalan data dengan lebih baik. Kami boleh menambah, memadam atau mengubah suai medan model, menggabungkan fail migrasi, membetulkan ralat dalam migrasi dan memuat semula data. Memahami teknik ini boleh menjadikannya lebih mudah untuk mengendalikan operasi pangkalan data yang kompleks.
Atas ialah kandungan terperinci Kemahiran pemindahan data dalam rangka kerja Django (Bahagian 2). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!