15. Migrations - chohankyun/python-django-study GitHub Wiki
##Migrations
λͺ¨λΈμ λ³κ²½μ λ°μ΄ν°λ² μ΄μ€μ μ μ© ν΄μ£Όλ λ°©λ²
DB μ€ν€λ§ λ²μ κ΄λ¦¬ μμ€ν
app/migrations ν΄λ λ°μ migration file μμ± λ° DB μ μ μ©
MIGRATION_MODULES μ€μ μΌλ‘ ν΄λλ₯Ό λ³κ²½ ν μ μμ
###λͺ λ Ήμ΄
- migrate : migration file μ λ΄μ©μ DB μ μ μ© μν¨λ€.
- makemigrations : λͺ¨λΈμ λ°νμΌλ‘ migration file μ λ§λ λ€.
- sqlmigrate : migration file μ μ½μ΄μ SQL λ¬ΈμΌλ‘ 보μ¬μ€λ€.
- showmigrations : DB μ μ μ©λ migrations file μ 보μ¬μ€λ€.
###μμ νλ¦
- model μμ±, μμ , μμ
- makemigrations λͺ λ Ήμ΄ μ€ν
makemigrations
$ python manage.py makemigrations
Migrations for 'books':
books/migrations/0003_auto.py:
- Alter field author on book
- νμ¬μ migrations file λΉκ΅
- μ λ°μ΄νΈ λ migrations file μμ±
- migrate λͺ λ Ήμ΄ μ€ν
migrate
$ python manage.py migrate
Operations to perform:
Apply all migrations: books
Running migrations:
Rendering model states... DONE
Applying books.0003_auto... OK
- database μ μ μ©
####νΉμ model λ§ μ μ©
makemigrations --name μ¬μ©
$ python manage.py makemigrations --name changed_my_model your_app_label
###λ²μ κ΄λ¦¬ migration λ²μ κ΄λ¦¬ μ λ³΄κ° μ μ₯λλ€.
- migration file μ λ²νΈλ κ°λ°μ μ°Έμ‘°μ©
- migration file μ νμΌλͺ μ μμ‘΄
migration file μ΄ κ°μ app μ μ μ© λ λ
- λ¬Έμ κ° μλ€κ³ μκ°λλ©΄ κ·Έλ₯ μ€ννλ©΄ μλμΌλ‘ μμλλ‘ μ μ©
- λ¬Έμ κ° μλ€κ³ μκ°λλ©΄ μμ ν΄μ μ μ©
###μμ‘΄μ±
- migration file μμ μλ dependencies μ μλκ²μ΄ μ μ©λ μ΄ν μ μ©
###migration file
migratios ν΄λμ μ μ₯
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [("migrations", "0001_initial")]
operations = [
migrations.DeleteModel("Tribble"),
migrations.AddField("Author", "rating", models.IntegerField(default=0)),
]
django.db.migrations.Migration
- Migration μ€ν
- μλλ 4κ°μ μμ± μ‘΄μ¬
- λλΆλΆ 2κ°μ μμ±λ§ μ¬μ©
- dependencies : μμ‘΄μ± λ¦¬μ€νΈ
- operations : migration λμ μ μΈ, sql μμ±μ μ°Έμ‘°
migration file μ μλμΌλ‘ μμ± ν μ μλ€,
νμ§λ§ κ°λ₯νλ©΄ μλμΌλ‘ μ²λ¦¬ νμ§ λ§κ²μ κΆμ₯
###Model managers
RunPython λͺ
λ Ήμ μν νκΈ° μν΄μ Manager κ°μ²΄λ₯Ό μ§λ ¬νν΄μ migration μ ν¬ν¨ μν¨λ€.
Manage κ°μ²΄λ₯Ό μ§λ ¬ν νλ €λ©΄ use_in_migrations = True λ₯Ό μ€μ νλ€.
(μΈμ μ°λμ§ λͺ¨λ₯΄κ² λ€?)
class MyManager(models.Manager):
use_in_migrations = True
class MyModel(models.Model):
objects = MyManager()
###Inital migrrations
DBμ ν
μ΄λΈ μμ±μ μν μ΅μ΄ migration νμΌμ λ§λλ κ²
μ΅μ΄ migrrations file
initial = True
DB ν μ΄λΈμ΄ λ§λ€μ΄μ§ μνμμ μ΅μ΄μ migration μ μ© νλ λ²
migrate --fake-initial
###νΉμ App μλ§ migration μ μ©
$ python manage.py makemigrations your_app_label
- model μ΄ λ³κ²½λμ§ μμ μμμ migration μ μ μ© νλ €λ©΄, intial migration μ λ¨Όμ μν νλ€.
- μλμΌλ‘ DB λ₯Ό λ³κ²½νμ§ λ§λΌ
###model field μ£Όμ
- system_check_deprecated_details
- system_check_removed_details
###Data Migrations
- RunPython μ μ¬μ©ν΄μ μ΄λ ΅μ§ μκ² data migration
####μμ
νλ¦
####λΉμ΄μλ migration file μμ±
python manage.py makemigrations --empty yourappname
####migration file μ΄κΈ°
# -*- coding: utf-8 -*-
# Generated by Django A.B on YYYY-MM-DD HH:MM
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
]
####RunPython μ μ¬μ©ν Data Migration
RunPython μμ νΈμΆ ν function μμ±
function μκ·λ¨ΌνΈ
- apps : λͺ¨λ app
- schema_editor : DB μμ μ€ν€λ§
λ€μμ first_name κ³Ό last_name μ ν©νλ κ²
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
def combine_names(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Person = apps.get_model("yourappname", "Person")
for person in Person.objects.all():
person.name = "%s %s" % (person.first_name, person.last_name)
person.save()
class Migration(migrations.Migration):
initial = True
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(combine_names),
]
####python manage.py migrate μ€ν