일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스 고득점 kit
- 유니온 파인드
- Learning
- 이코테
- SSAFYcial
- DP
- ssafy 7기
- ssafy 7기 합격
- 웹 표준 사이트 만들기
- 코딩교육
- git
- pytorch
- 싸피 7기 입학식
- DenseNet
- bfs
- 삼성 청년 SW 아카데미
- SSAFY
- SSAFY 입학식
- React
- dfs
- 백준7576 bfs
- SWEA
- SSAFY 8기
- 백준
- 프로그래머스
- ssafy 7기 교수님
- 삼성청년sw아카데미
- 코딩 교육
- 전이학습
- 알고리즘
- Today
- Total
개미의 개열시미 프로그래밍
[django] 2. Mysql 연동과 테이블 생성 + 모델 만들기 본문
장고의 개발 환경이 준비되었다면 이제 데이터베이스를 연동할 순서다.
장고를 설치하면 sqlite3이 자동으로 연동이 되지만 이번 프로젝트에서는 MySQL을 연동하는 작업을 한다.
Mysql 연동과 테이블 생성
$ (venv) install mysqlclient
- 가상 환경 진입 후 mysqlclient설치
현재 MySQL에 데이터베이스가 없는 상태이다. MySQL Workbench에서 DB를 만들고 사용자 생성하는 부분은 아래의 링크를 참조했다.
https://diaryofgreen.tistory.com/132
[MySQL Workbench]
- 이렇게 사용자 생성과 DB 생성까지 마친다. DB도 터미널에서 가능하지만 편의상 workbench에서 만들었다.
github을 통해 관리를 하고 있다면 최상위 디렉터리에 my_settings.py라는 파일을 생성하고, 유저명과 패스워드와 같은 정보를 보호하기 위해 gitignore에 넣어준다.
그리고 my_settings.py 에 아래와 데이터베이스 설정을 만든다.
# django_rest/my_settings.py
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'store', # db이름
'USER': 'user_name', # 로그인-유저 명
'PASSWORD': 'password',# 로그인- 비밀번호
'HOST': 'localhost',
'PORT': '3306',
}
}
다음은 mysite/settings.py에서 기존 sqlite3를 적용한 데이터 베이스 부분을 my_settings.py를 임포트 해서 변경한다.
# mysite/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
위 부분을 아래의 코드로 바꿔주기만 하면 된다.
# mystie/settings.py
import my_settings
DATABASES = my_settings.DATABASES
이제 아래의 migrate를 실행하여 데이터베이스에 테이블을 만들어보려한다.
- 현재 테이블엔 아무것도 없는 상태이다.
$ (venv) python manage.py makemigrations
$ (venv) python manage.py migrate
- migrate명령어를 통해 테이블을 만들어준다.
- 테이블이 생성된 것을 알 수 있다.
모델 만들기
# api/models.py
from django.db import models
from django.conf import settings
from django.utils import timezone
class Item_Info(models.Model):
id = models.CharField(max_length=200,null=False, primary_key=True)
category_L = models.IntegerField()
name = models.CharField(max_length=200)
value = models.IntegerField()
price = models.IntegerField()
def __str__(self):
return self.name
- 모델은 위처럼 id, category_L, name, value, price 속성을 추가했다.
$ python manage.py makemigrations api
$ python manage.py migarate
- 위 명령어로 모델이 생성된 것을 반영한다.
- 위에 models.py에서 설정한 속성들을 포함한 테이블이 생성된 것을 알 수 있다.
* 모델을 자주 바꾸고 생성하는 연습을 하던 중 'python manage.py migrate'가 안 먹히는 에러가 떴었는데 아래 블로그를 참고해서 문제를 해결했다.
이제 생성된 테이블에 값을 넣어보려 한다. 값을 넣어주는 방법에는 workbench를 쓰거나 쉘을 열어 ORM을 쓰거나 터미널에서 MySQL을 여는 방법이 있다.
$ (venv) winpty mysql -u 사용자명 -p
- 만약 git bash 터미널에서 MySQL을 열고 싶다면 앞에 winpty를 붙여주자
- '사용자명' 에는 root가 아닌 생성했던 사용자를 넣도록 한다.
학교에서 했던 Workbench나 터미널에서 하는 방법 말고 쉘을 열어 ORM을 활용해서 속성들에 값을 넣어주는 것을 해보았다.
$ (venv) python manage.py shell
- 우선 쉘을 연다.
>>> from api.models import Item_Info
>>> q = Item_Info(id="1", category_L="0", name="coke", value="120", price="1100")
>>> q.save()
- 모델을 임포트하고 속성에 맞는 타입으로 값을 넣어준 뒤 save 해주면 저장이 된 것을 확인할 수 있다.
* 조회 및 수정은 아래 위키 독스 '점프 투 장고'를 참고하면 된다.
https://wikidocs.net/70650#1_2
참고 사이트
- https://uni2237.tistory.com/73?category=830394
'WEB > django' 카테고리의 다른 글
[django] 3. Serializer 라이브러리 활용(Rest Framework) (2) | 2021.07.03 |
---|---|
[django] 1. 장고 개발 환경 준비하기 (with Rest Framework) (0) | 2021.07.02 |
[django] 개발 흐름 이해하기 (3) | 2021.06.29 |
[django] ORM과 데이터를 관리하는 모델 생성하기 (5) | 2021.06.28 |