models.py
에 Model class 를 작성함으로 database의 table과 mapping이 된다. 파일 안에 내용을 작성해보자.
- mane, menu, category는 각 테이블의 필드값이 된다.
class Meta
: 메타 클래스는 모델에 대한 다양한 사항을 정의한다. 자세한 내용은 이 포스팅으로.
$ python manage.py makemigrations app이름
$ python manage.py migrate
먼저 로컬 mysql 서버에 접속한 후 database 목록을 불러온다.
$ mysql -u root -p
show databases;
그리고 목록 중 서버와 연결된 database를 골라서 아래의 명령어로 database 내 table 목록을 불러온다.
use 'database 이름';
show tables;
테이블 구조를 확인할 때는 desc 테이블명
을 사용한다.
Django Shell은 파이썬, Django, 데이터베이스가 한데 모아서 실험해 볼 수 있는 작업장이라고 할 수 있다. 작성한 코드가 잘 기능하는지 확인하는 용도로 쓰이며, shell에서 작동안하면 다른 곳에서도 작동을 안한다는 뜻이니 디버깅 하기에 좋다. Shell에 한 번 진입해 보자.
$ python manage.py shell
Django Shell 을 더욱 깔끔하게 만들어 사용하고자 한다면 아래 라이브러리를 설치하면 된다.
$ pip install ipython
만약 shell 에서도 자동완성 기능을 사용하고싶으면 아래 코드를 사전에 실행해둔다.
import os, django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
django.setup()
Shell에 진입을 했으면 model.py
를 불러오자. 참고로 class 이름 부분에 *
을 쓰는 것은 최대한 지양하는게 좋다.
from 앱이름.models import 클래스이름
삭제도 해보자.
이제 다른 값들도 넣어보자. 그런데 id 값이 1이 아닌 2로 시작하는것을 볼 수 있다. id 값은 delete가 된다고 해서 초기화 되지 않는다.
파이썬 shell이니 for문도 활용 가능하다.
get()
VS filter()
어차피 값은 1개 뿐이라 get
과 filter
의 차이점은 없다. 그래도 filter
를 사용해야 하는 경우는 언제일까?
filter
는 id 값이 없는 경우에 빈 QuerySet 리스트를 반환한다. 하지만 get
을 사용하면 error가 발생한다. 없는 값을 반환하는 경우 error가 발생하는 것과 어떻게든 코드가 돌아가는건 아주 큰 차이다.