-
[Django, 웹개발] Django에서 MySQL 연동 완벽공략파이썬, Python/[Web] 웹개발 - 장고, Django 2020. 2. 19. 15:41728x90
전제조건 : mysqlclient 설치(공략법은 아래 참고)
2020/02/15 - [파이썬, Python] - [Django, 웹개발] pip install mysqlclient 오류
Django에서 MySQL로 연동/연결하는 방법
1. Setting.py 에서 Database 입력
- "Ctrl + F" 로 "DATABASES" 검색 후 아래와 같이 복사/붙여넣기
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test_db', 'USER': 'root', 'PASSWORD' : '0000', 'HOST' : 'localhost', 'PORT' : '3306', 'OPTIONS': { 'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"'} }}
2. models.py 에서 데이터베이스를 연결
- 아래와 같이 모델을 짜놓을 경우, Post class 내에 'author', 'title', 'text' ,'created_date', 'published_date'
등의 내용으로 db에 등록됨
from django.db import models. class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) title = models.CharField(max_length=200) text = models.TextField() created_date = models.DateTimeField( default=timezone.now) published_date = models.DateTimeField( blank=True, null=True)
3. 'CMD' 창에서 'python manage.py makemigrations' 으로 모델의 변경사항을 저장
- django에서 알 수 있도록 하는 과정
4. 'CMD' 창에서 'python manage.py migrate' 명령어를 쳐서 자동으로 database 내 schema를 관리해줌
Tip. 만약 'python manage.py runserver' 를 수행했을경우 특별한 이슈 없이 서버가 돌아감에도 불구하고
웹페이지에 데이터베이스에 저장한 내용들이 나오지 않을 경우
1) admin으로 들어가서 게시물을 신규로 만들어본다.
2) 데이터베이스에 들어가서 내가 만든 게시물이 저장이 되어 있는지 확인한다
> 저장되어 있다면, 데이터베이스 Read/Write에는 전혀 이상이 없음
3) 그렇다면 불러오는 조건에 문제가 있을 수 있음. 이를 확인하기 위해 python shell을 실행시켜 순차적으로 확인
python manage.py shell
3-1) 처음으로 db에 저장되어있는 사항이 불러와지는지 다시확인
Post.objects.all()
3-2) 정상적으로 불러와 진다면, 내가 views.py 에서 작성한 코드를 긁어서 넣어본다.
posts = Post.objects.filter(published_date__lte = timezone.now()).order_by('published_date')
* 우선 위 내용을 설명하자면,
models.py에서 Post라는 class를 정의해서 데이터베이스에 접근하고자 했음.
Post의 objects 들을 불러오는데, filter를 걸어서 불러올 예정
filter는 published_date 를 기준으로 현재 시간보다 같거나 작을경우. 순서는 발행된 순서대로
** __lte 의 의미는 less than equal 이며 같거나 작은 값을 의미함.
*** order_by 에서 역순으로 하고싶을 경우 앞에 마이너스(-)를 붙이면 된다. 'published_date' > '-published_date'
3-3) 여기서 나의 경우 Query Set이 비어있었다. 살펴보니 published_date 값이 null 로 제외되어 있었음.
3-4) 문제가 나왔으니 해결책도 자연스럽게 나온다. published_date 대신 created_date로 변경했음.
반응형'파이썬, Python > [Web] 웹개발 - 장고, Django' 카테고리의 다른 글
Git 처음시작하기(Vscode 연동) (0) 2020.08.02 [Django] makemigrations 오류 (0) 2020.05.12 [Django, 웹개발] Django 웹개발 순서 (0) 2020.02.24 [Django, 웹개발] pip install mysqlclient 오류 (0) 2020.02.15 [Django, 웹개발] 참고자료 (0) 2020.02.15