Study/django

DB를 먼저 설계하고 django와 연동하기 (4) - fake를 사용해 migrate 후 models.py 수정 반영하기

bluebamus 2023. 12. 8.

github 저장소 : https://github.com/bluebamus/synchronization-test-between-django-and-db

 

1. DB를 먼저 설계하고 django와 연동하기 (1) - 작업 정의

2. DB를 먼저 설계하고 django와 연동하기 (2) - migration 후 db 추가 설계 그리고 inspectdb

3. DB를 먼저 설계하고 django와 연동하기 (3) - inspectdb로 생성된 models.py로 migrations 후 비교

4. DB를 먼저 설계하고 django와 연동하기 (4) - fake를 사용해 migrate 후 models.py 수정 반영하기

5. DB를 먼저 설계하고 django와 연동하기 (5) - view table 테스트

6. DB를 먼저 설계하고 django와 연동하기 (6) - 함수와 lock 사용하기

 

 1. 현재 상태 정리

   - django project를 만들고 필수 table들을 만들기 위해 makemigrations 후 migrate를 실행했다.

   - item, item_order, stock, stock_order 테이블을 직접 database에 만들었다.

   - inspectdb를 이용해 root 위치에 models.py로 파일을 생성했다.

   - sync app을 생성하고 item, item_order, stock, stock_order 테이블만 분리했다.

 

 2. fake 사용하기

   - makemigrations을 실행한다.

python manage.py makemigrations

 

   - migrate를 fake를 이용해 실행한다.

python manage.py migrate --fake

 

   - 터미널 정보 확인

 

   - django_migrations 테이블 확인

 

   - showmigrations 실행 후 로그 확인

python manage.py showmigrations

 

 3. models.py 코드 수정 후 재동기화 테스트

   - items 테이블 수정

      - item_expiration 필드 추가 및 item_group index 삭제 후 item_expiration index 추가

class Items(models.Model):
    item_name = models.CharField(max_length=20)
    item_group = models.CharField(max_length=10)
    item_number = models.IntegerField()
    item_expiration = models.DateTimeField(blank=True, null=True)
    default_order_stock = models.IntegerField(default=30)
    created_at = models.DateTimeField(blank=True, null=True, auto_now_add=True)

    class Meta:
        managed = True
        db_table = "items"
        unique_together = (("item_name", "item_number"),)
        indexes = [
            models.Index(fields=["item_expiration"], name="item_expiration_idx"),
        ]

 

   - makemigrations 및 migrate 로그 확인

 

   - django_migrations 테이블 확인

 

   - items 테이블 확인

      - 이전에 직접 table에 설정한 default가 유지되는 상태에서 item_expiration 필드가 새로 추가 되었다.

 

      - index 결과 확인

         - 기존 item_group에 대한 index는 삭제되고 item_expiration에 대한 index가 추가 생성되었다.

 

 4. 다음 작업

   - view 테이블 생성 후 동기화

   - 프로시저를 만들어 CURD 테스트, 프로시저 lock 테스트

 

 - reference :

https://blex.me/@baealex/django-migrate-%EC%9E%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

Django migrate 잘 사용하기 — baealex

장고의 migrate 명령어를 제대로 사용하는 것으로 데이터베이스 스키마 변경에 의한 데이터 손실을 줄여 개발 효율성을 높일 수 있다. migrate 명령어와 함께 사용할 수 있는 옵션들과 makemigrations, sh

blex.me

 

댓글