[Django] Westagram models.py 작성 + 경험한 오류

은경·2021년 10월 26일
0

가상환경 생성 후 main branch에 초기 setting이 끝났다면 , 본격적으로 프로젝트를 시작한다.
반드시 main 브랜치에서 작업할 브랜치를 새로 생성한다. 까먹지말자

 git checkout main 
 git branch feature/eunkyung-models

새로 만든 작업할 브랜치로 이동후 앱을 생성해준다.
startapp은 manage.py가 위치한 곳에서 실행해야 함.

git checkout feature/eunkyung-models 
python manage.py startapp users #앱생성

생성된 models.py에 클래스를 작성하고 테이블을 생성해야한다.

from django.db import models

class User(models.Model):
    name         = models.CharField(max_length=45)
    email        = models.CharField(max_length=45, unique=True)
    password     = models.CharField(max_length=200)
    # 비밀번호는 암호화 해야하기 때문에 maxlen을200으로 설정해주어야 한다.
    number       = models.CharField(max_length=45, default='')
    # 처음엔 PositiveIntegerField를 썼다가 - 이 들어오는 경우가 있기때문에 
    # CharField를 써야한다는 피드백을 받았다.   
    nickname     = models.CharField(max_length=50, default='')

    class Meta:
        db_table = 'users'

models.py를 작성하면 꼭 DB에 적용을 해주어야 한다.

python manage.py makemigrations westagram(app이름)
python manage.py migrate

작성 후 mysql을 실행해서 데이터베이스가 잘 생성이 되었는지 확인을 해야 하는데 ...🤔

MySql 데이터 확인

  • Mysql 접속
mysql -u root -p 
  • DB확인&선택
SHOW databases;  # database 확인
USE database이름;  # 사용할 데이터베이스 선택
  • Table 확인 & table 정보 확인
SHOW tables;  # table 확인
DESC table_name;  # 해당 table의 정보 확인
SELECT * FROM table_name  # 해당 table의 모든 데이터 확인

오류😨

SHOW databases;를 했을때 분명히 westagram 데이터베이스가 목록에 보였는데 use westagram; -> SHOW tables;를 했더니 비어있다는 것이였다😱😱😱

migrate도 몇번이나 시도했지만 잘 적용 되는척 하더니 아무것도 바뀌지 않았다..

이런종류의 오류가 처음이라 너무 멘붕 ... 하루를 꼬박 붙잡고있었다. 멘토님의 도움으로 겨우겨우 집나간 테이블을 찾아왔다 ! ㅠㅠ

원인🔍

초기세팅에서 my_settings.py와 settings.py를 연결해 줄때 제대로 확인하지 않은 탓이였다.

1) settings.py 파일에서 DATABASES = DATABASES 구문이 빠져있었고,
2) 아래쪽에 지우지 않고 넘어간 DATABASES 쪽으로 전부다 migrate가 되어서,

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

분명 migration 은 제대로 된것 같았지만 테이블이 하나도 뜨지 않은 것이였다.

해결💡

  • settings.py에서 위의 DATABASES = { 'dafault....} (기본데이터베이스) 를 지운다.

  • db.sqlite.3 파일과 users/migrations 아래에 존재하는 마이그래이션 했던 파일들을 _init _.py 만빼고 다 삭제해 주었다.

  • mysql에서 DROP database 명령어로 데이터베이스를 삭제후 재생성 해주었다.

  • 다시 migrate를 해준후 show tables를 입력하면 원했던 데이터베이스와 연결이 되어 테이블이 다시 보이는 것을 알수있다 ! 👍



다음부턴 꼼꼼하게 살펴보고 한번 더 확인하도록 노력해야겠다...🤦‍♀️

profile
Python 서버 개발자

0개의 댓글