티스토리 뷰

Web/Django

[Django] Migration

HAN_PY 2020. 6. 26. 09:21
반응형

Migration

Model로 정의된 데이터베이스 스키마를 반영한다

쉽게 말해서 DataBase에 반영한다고 생각하자.

 

 

 

models.py(DB 모델링을 해보자)


class Article(models.Model):

    title = models.CharField(max_length=140)

    content = models.TextField()

    created_at = models.DateTimeField(auto_now_add=True)

    updated_at = models.DateTimeField(auto_now=True)

 


모델링 후

DB에 반영 할 준비

> pyrhon manage.py makemigrations

0001_initial.py가 생성된다. 눌러서 들어가 본 후에 오타없나 확인 후의 migrate를 진행한다.

 

 

DB에 반영

> python manage.py migrate

 

 

DB에 반영 여부를 확인

> python manage.py showmigrations

[] : 미반영

[x] : 반영

 

 

admin.py

DB반영이 됐는지 확인을 위해 admin.py 아래와 같이 코드를 작성한다.


from .models iport Article

admin.site.register(Article)


코드의 해석은 모델에서 Article을 불러와서 그 Article을 어드민 싸이트에 등록해달라는 뜻이다.

 

 

반영 확인

서버 실행전에 관리자 ID를 만들자.

>python manage.py createsuperuser

절차에 맞게 관리자 아이디를 만든다.

 

 

> python manage.py runserver (서버 실행)

서버들어가서 url뒤에 admin 붙임.

로그인 창에서 위에서 만든 아이디로 로그인을 하면, 데이터 관리가 가능하다.

 

 

 


migrate 후에 오타 발생 시

현재 상황은 models.py를 작성하고 migration을 하고 migrate를 했다. 그런데 오타를 발견 했다면???

수정 후 다시 makemigrations 하고 migrate 하면 된다. (git 처럼 변경사항이 migrations폴더에 쌓인다.)

 


 

단순 오타가 아닌, model에 문제 발생 시

db.sqlite3(우리가 쓰고 있는 DB)과 migrations 안에 있는 마이그레이트 파일(이력)들을 모두 지운다.

그리고 새롭게 다시 시작하자.(DB가 다 지워진다.)

+ 단, migrations 폴더를 지우면 안된다. __init__.py 가 있어야 모듈로 관리가 된다. 폴더를 지우고 다시 __init__.py를 만들어도 되지만, 굳이 그럴 이유가 없다.

반응형

'Web > Django' 카테고리의 다른 글

[django] CRUD 한번에 구현하기  (0) 2020.06.30
[Django] Model 기초  (0) 2020.06.28
[Django] ORM  (0) 2020.06.24
[django] Form으로 사용자의 입력 받기+ModelForm  (0) 2020.06.22
[Django] CRUD_READ_상세보기(detail)  (0) 2020.06.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함