본문 바로가기
django

2020.09.01_django_makemigrations,migrate

by 해맑은 코린이 2020. 9. 2.

2020.09.01_django_makemigrations,migrate_정리노트

 

홀홀홀.. 알고리즘 하나만 정리하려니 너무 양심없어서 쓰는 아껴뒀던 장고 정리노트..

 

오늘은 모델을 사용할 때 해주어야 한다는, python manage.py makemigrations , python manage.py migrate 를 왜 쓰는지 ? 에 대한 정리노트 

 

 


 

그 전에 먼저 팁팁 하나, 만약 우리가 cd 를 통해 파일을 이동하려고 할 때 그 상위 폴더로 갈때는 

 

 

 

.. 을 써주게 되면,

 

 

 

 

이렇게 상위 폴더로 가게 된다! ( 가상환경 안 킨 거 기억나서 위로 가다가 혹시나 하고 메모메모 ㅎ )

 

 

추가로 여러가지 내가 기억하기 위해서기도 한 꿀팁들 메모메모

 

ctrl + T  = 파일명으로 파일 찾기

 

터미널 vs 코드에서 켜기 = ctrl + shift + ` 

 

주석이 안달릴 때,

 

 

 

 

여기서 한컴 입력기로 자동으로 바뀌면 가끔 주석이 안달리더라... 그래서 그럴 때는 Microsoft 입력기로 바꿔준 뒤 ctrl + / 를 통해 주석을 달면 잘 달아진다.

 

 

기본적이고 어쩌면 안 쓸지도 모르는 기능들이지만, 내가 겪었을 때 굉장히 은근 기본적이라 찾기 어렵고 뭐라 검색해야 될지 몰랐을 때 찾던 것들이라서.. 혹시나 해서 같이 기억하자는 의미에서 메모메모 ㅎ

 

 


 

 

자 그러면 진짜 migrations 으로 가보자!

 

간단하게 makemigrations 와 migrate 를 해주는 이유는 models.py 에 정의 된 모델의 생성, 변경 내역에 관한 히스토리를 관리하고, 데이터 베이스에 그를 적용 , 구조를 바꿀 수 있기 때문인데,

 

 

korinkorin.tistory.com/3

 

2020.08.20 django_CRUD_1

장고 첫 노트! 그래서 장고에서 프로젝트를 시작하는 방법부터 기본 CRUD를 찬찬히..해보자..아마.. 우당탕탕 예상.. 내가 사용하는 것은 vs code기 때문에 여기서 터미널을 열어주고 이렇게 python -m

korinkorin.tistory.com

 

 

이 곳에서 간단히 말했던 것처럼 모델의 내용을 수정하고 관리하며, 그를 데이터 베이스에 따른 언어를 따로 써주지 않고 적용 시켜주기 위함이라고 보면 될 것 같다! 

 

 

자세하게 하나하나 짚어가며 설명!

 

CRUD 포스팅에 있던 캡쳐본

 

 

python manage.py makemigrations - 마이그레이션 생성 , 보통 이 명령어 뒤에 앱 이름을 적게 되면, 마이그레이션 파일이 생성된다. 라고 정의하지만, 우리는 변경 후 이 명령어를 실행시키게 되면, 자동으로 변경 내용이 생성 된다고 보면 된다. 그러면 경로가 나타나면서 자동적으로 0001_initial.py 라는 파일이 생기게 되는데!! 

 

++ 보통 예상치 못한 마이그레이션을 방지하기 위해 마이그레이션을 할 때는 뒤에 앱이름을 써주는 게 좋다고 한다!!

     하지만 초기에는 장고가 자동적으로 여러 앱, 파일을 마이그레이션을 하기 때문에 앱이름을 쓰면 안된다.

 

 

 

 

이렇게 실행한 후 main 앱 안의 migrations 라는 파일이 생성이 되게 되고, ( initial.py 가 모델 초기 마이그레이션 파일이다. ) 모델을 추가하고 생성될 때 마다 새로운 마이그레이션 파일이 밑에 생기게 된다. ( 우리가 media 파일을 다룰 때 수정해줬던 myimage.py 내용이 밑에 보면 적혀있다. 나는 중간에 두 번 수정해줘서 그럼 ...ㅎㅁㅎ.. )

 

 

 

 

이렇게 우리가 만들어줬던 모델이 들어가 있다. 우리가 CRUD 에서 primarykey를 이용해 update, detail, delete 등 같은 기능을 만들어 줬었는데, 따로 모델에 적어주지 않은 이유도 여기에 나온다. 자동으로 makemigrations 를 통해  primary_key = True 가 생성이 되었기 때문에, id 값을 들고 올 수 있었다! 그리고 나머지 필드들은 우리가 Write 라는 모델에다가 적어준 것들을 여기서도 볼 수가 있다 . 

 

또한 모델의 초기 마이그레이션 파일은 initial = True 의 속성을 가진 initial.py 이다.

 

또한 종속성 필드는 이 항목이 의존하는 마이그레이션의 목록, 즉 이 마이그레이션이 수행하는 작업을 정의 하는 바로 밑 operations의 클래스 목록이다!

 

수정해준 내역도 한번 보자보자.

 

 

 

 

2번째 마이그레이션 파일을 보면,

 

 

 

이렇게 main 앱에서 0001_initial 안에 적혀있던 ( 종속을 해왔다는 뜻이겠쥬 ) Write 모델에 추가한 ImageField 를 볼 수가 있다. 

 

 

 

 

 

 

근데 이렇게 생성을 해주고 데이터 베이스 적용은 어떻게 했을까??

 

 

python manage.py migrate - 마이그레이션 적용, 바로 이 명령어로 우리는 데이터 베이스에 적용을 했던 것이다! 

 

마이그레이트를 해주는 순서는 미적용 마이그레이션 파일 부터 최근 마이그레이션 파일까지 Forward 마이그레이션을 순차적으로 수행하게 된다!  이렇게 하면 데이터베이스에 우리가 직접 접근하지 않고도 모델을 변경할 수 있게 된다.

 

 

 

 

 

추가로 우리는 터미널 상에서 현황을 볼 수도 있다.

 

python manage.py showmigrations - 마이그레이션 적용 현황으로 

 

[X] - 이 표시는 마이그레이션을 적용 후에 나타나는 표시이다.

[ ] - 이 표시는 마이그레이션을 적용하지 않았다면 나타나는 표시이다. ( 모델 수정만 해줬을 경우 )

 

현재는 내가 모두 migrations 을 적용했기 때문에 모두 X 표시가 뜬다.

 

여기서도 뒤에 앱이름을 써줌으로써 특정 앱의 현황도 조회가 가능하다.

 

 

 

python manage.py sqlmigrate - 지정 마이그레이션의 SQL 역이다. 뒤에 앱이름과 , 마이그레이션 이름을 써서 특정 조회 역시 가능하다! 데이터베이스는..내가 증맬 모르는 영역이라.. 사실 잘모르겠다..ㅎㅁㅎ... 

 

 

SQLBrower 을 통해 브라우저로 DB 내역을 확인할 수가 있는데, SQLLite 사용시 가능하고, 여기서 볼 수 있는 파일은 

 

 

 

프로젝트 밑에 있는 요요 파일의 내역이다. 나는 SQLLite 를 사용하지 않기 때문에, vs 코드에서 보면 어마무시하게 이상하게 나오더라..ㅎ.. 쨋든 내역을 확인하고 싶다면 터미널에 python manage.py sqlmigrate 를! 브라우저에서 보고 싶다면 SQLBrower여기서 확인하면 될듯 ! 

 

 

 

이렇게 간단하게 우리는 장고에 쓰인 모델을 데이터 베이스에 자동으로 적용하고 ,추가하는 기능들을 훑어 보았는데, 데이터 베이스를 하나도 모르는 나로써는 이러한 기능들이 참 유용하다고 생각한다 ! 짝짝 오늘의 두번째 포스팅 끝! 

'django' 카테고리의 다른 글

2020.09.08_django_category 나누기  (2) 2020.09.09
2020.09.02_django_template 상속  (0) 2020.09.03
2020.08.31_django_ sign_up, login, logout  (0) 2020.09.01
2020.08.27 _Django_ Static , Media _정리  (4) 2020.08.28
2020.08.23_django_CRUD_2  (0) 2020.08.24

댓글