TIL #32 Django #1 : MySQL와 연동하기

채록·2021년 1월 21일
0

Python & Django

목록 보기
4/34
post-thumbnail

🐶 들어가는 말

Python 의 기초를 다져놓은 후 Python의 프레임워크 중 하나인 Django에 들어섰다.
Django란 무엇인지, 왜 Django가 유용한지에 대해 why? 를 알게되었고 실제 실습을 통해 Django와 MySQL을 연동하면서 배워가는 중이다!!

I. 새 Project 만들어 Django와 MySQL 연동하기

연습 대상은 다위소 ㅋㅋㅋ daweso
참고로 😊 는 의미없다!
(가상환경이름)😊 이후에 코드를 작성하는 것!

1. 가상환경

모든 작업은 가상환경에서 진행한다.

가상환경 ?
컴퓨터 안에 여러개의 인격체가 있다고 비유하면 될것같다.
지금은 miniconda3을 사용해 가상환경을 사용하고 있다.


apple과 banana라는 두개의 가상환경이 있을때 apple에서 Django가 설치되어있다고 해서 banana에서도 존재하는 것은 아니다. 필요하면 banana에서도 설치해야 한다. 이런 환경!

1-1. 가상환경 만들기

(base)😊 conda create -n "example" python=3.9

구조는 다음과 같다.
conda create -n "가상환경이름" 설치할파이썬버전
여기서 -n은 name을 의미한다.

그러면 여러가지가 install 된다.

중간에 Proceed ([y]/n)?에서 y를 입력하면 가상환경 만들기가 완료된다.
정말 친절하게도 example환경을 켜는법 / 끄는법도 알려준다😆

켜기 : conda activate 가상환경이름
끄기 : conda deactivate 참고로 inactivate라는 단어는 없다..... k영단어

1-2. 가상환경 활성화

(base)😊 conda activate example

example이라는 가상환경을 활성화 한다.
그러면 코드치는 부분이 다음과 같이 변한다.

(example)😊 

1-3. 가상환경 상태 확인

명령어 ls를 사용해 현재 위치에 존재하는 것들을 확인한다.

ls ?
list directory contents에서 유래된 명령어로 해당 디렉토리 내에 있는 디렉토리 및 파일을 화면에 출력한다.

참고로 나는 이전에 만들어놓은것들이 있어 몇개가 더 있다.


2. Django , mysqlclient

2-1. Django 설치

가상환경마다 필요시에 각각 Django를 설치해야 한다.

(example)😊 pip install django

2-2. 이후 Django와 MySQl를 연결해주는 프로그램 설치

(example)😊 pip install mysqlclient

이후 pip freeze명령어를 통해 현재 설치된 것들을 확인할 수 있다.
!! python과 mysql은 표기되지 않는다.


3. Directory 생성

3-1. project 보관 direcotry

새로 만들 Project를 보관할 directory를 먼저 만들어 준다. (보관용!)

만약 프로젝트를 여러개 만들 경우, 그런 프로젝트가 담긴 디렉토리를 보관할 나만의 디렉토리를 만드는 것이 좋다

  • 나는 지금 이 프로젝트만 만들 가상환경이기 때문에 추가로 만들진 않았다. 만약 추가로 만들 경우 첫번째 directory (pj가 담긴 dir들 보관용)을 만들고, 그 dir으로 이동(cd) 후 아래 단계를 진행한다.
(example)😊 mkdir daweso17

mkdir ?
make directory 의 의미, 새로운 direcotry를 만든다


+) rmdir ?
remove directory=> rmdir "디렉이름"

그 후 새로만든 daweso17 directory로 이동하기.

3-2. direcotory로 이동

(example)😊 cd daweso17

cd ?
change directory

그러면 코드입력 부분이 다음과 같이 표기된다.

(example) ~/daweso17😊 

daweso17 위치에 있음을 확인 할 수 있다. (위치에 따라 바뀜!)

이후 ls를 하면 아무것도 없다 why? 아직 암것도 안만들었으니까!



4. Project와 app 만들기

이제 진짜 시작이다.
여기서 Project와 app 개념의 차이를 알아야 하는데 간단하게 말해서 project가 넷플릭스 라면 app은 영화 / 결제 / 로그인 등의 개념이다.
넷플릭스라는 project가 있는데 거기에는 영화, 결제, 로그인 등과 관련된 app들이 존재한다.

4-1. startproject

Django는 웹페이지를 만들때 여러 구조들을 미리 제공해준다. 때문에 python을 이용해 웹페이지를 구성하는 backend를 만들때 django를 사용할 것이다.
기본으로 제공해 주는 .py 파일들을 이따 확인해 볼 것이다.

다른것, 예를들어 Flask의 경우 제공되는게 없어서 다.. 만들어야 한다..

이때 만드는 방식에 두가지가 있다!
바로 만들 project 이름 뒤에 dot (.)을 찍느냐, 안찍느냐이다.

startproject에서 dot (.)의 차이

1) dot (.) 없을때

(example) ~/daweso17😊 django-admin startproject


daweso17 이라는 dir 안에서daweso 라는 pj를 만들면 daweso 라는 새로운 dir이 생긴다!
tree를 통해 현재 daweso17 dir의 구조를 보면 위 나뭇가지 그림처럼 나온다.

이후 manage.py로 여러가지를 실행하려면 daweso 라는 생성된 dir 안으로 이동해야 한다.

2) dot (.) 있을때

cd .. 를 통해 daweso 에서 나와 상위폴더인 daweso17로 위치하여 새로 만들어보자

(example) ~/daweso17😊 django-admin dot .

만들 pj 이름 뒤 한칸 띄우고 . 을 입력해준다.
dot(.)의미는 "현재위치"라는 뜻이다. (..는 이전위치겠지?)

그 후 daweso17 dir 상태는 다음과 같다.

여러 파일을 실행시킬 manage.py 의 위치가 바로 뜬다. (daweso 라는 dir이 자동생성된 모습과 다르다)

manage.py 의 위치
runserver, startapp 등 manage.py를 통해 하며 / manage.py가 있는 곳을 "메인위치" 라고 한다.
어차피 계속 하나의 dir에 하나의 pj을 만들것이기 때문에 앞으로 pj를 새로 만들땐 뒤에 dot을 붙여주는게 좋을 듯 하다!



4-2. App 만들기

각 기능을 수행할 app을 만들어 준다.

app ?
app 안에는 여러 python 파일들(models.py / views.py 등..) 그 파일들 안에 class와 메소드 등이 입력된다.

먼저 상품과 관련된 app 이 필요하다.

startapp은 manage.py를 통해 하기 때문에 항상 manage.py가 있는 dir에서 해주야 한다!

나는 startproject할때 dot을 안붙여서 daweso라는 dir안에 만들어졌으므로 cd daweso를 했다. "위치 : daweso17/daweso"

(example) ~/daweso😊 python manange.py startapp products

아까 말했듯 Django는 자동으로 몇개의 .py를 만들어준다. 방금 처음 만든 products 앱에서 내가 추가하지도 않은 몇개의 .py들을 확인할 수 있다!



5. MySQL

"mysql 만들고!"
"settings.py에서 db 설정 변경하고!"
"runserver로 확인하고!"

5-1. mysql 실행

  • 새 터미널을 띄우는 것을 추천한다. (언제 왔다갔다 해...)
(base)😊 mysql -u root -p

위 코드를 입력하면 mysql을 실행하기 위해 내가 설정했던 pw를 입력하라고 한다.
(이러니까 비밀번호는 까먹지 않고 털리지 않을걸로 만들어야 한다...)

5-2. 기존 database 확인

mysql 에 있는 db들을 확인한다.

참고로 mysql의 언어 규칙으로 항상 뒤에 세미콜론(;)을 붙여주어야 한다!!


안붙이고 엔터치면 명령어 입력을 덜 끝낸걸로 판단해 (->) 가 뜨면서 마저 입력하는걸 기다린다.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

현재 연습중인 pj의 db는 만든게 없어 표시되지 않고 기본으로 존재하는 것들을 확인할 수 있다.

5-3. 새로운 database 생성

mysql> create database product character set utf8mb4 collate utf8mb4_general_ci;
  • create database 새로운 database를 만든다

  • product 내가 새로 만들 database의 이름
    이거 꼭 기억!! 나중에 django랑 mysql 연결할때 db이름 정확하게 입력해주어야 한다!!

  • character set utf8mb4 collate utf8mb4_general_ci; 내가 평소에 알던 utf8이 아니라 utf8mb4이다. 이것은 mysql을 만들때 3세대가 아닌 2세대 ver으로 만든 탓에 한국어와 이모티콘(?)이 제대로 인식되지 않는걸 방지하기 위함이다.

생성 후 다시 db를 확인하면 다음과 같이 추가되어 있는걸 확인할 수 있다.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| product            |
| sys                |
+--------------------+

이후 exit로 mysql 나가기 잘가라고 인사해주는거 귀여워

mysql> exit;
Bye


6. settings.py

새로운 db를 추가했고, 이것이 django와 연동되게 하려면? 당연히 django에도 알려줘야 한다. 알려주려면 설정을 바꿔야 하고!!

6-1. settings.py 진입

처음 project를 만들면 manage.py와 pj이름과 같은 이름의 폴더가 생기는걸 볼 수 있다.

.
├── daweso
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

이 파일은 config파일로 절대 이름을 수정해서도, 삭제해서도 안된다!! 이 파일 안에 있는 settings.py의 설정을 조작하여 다음 단계를 진행한다.

# manage.py와 daweso dir이 있는 곳에서 진입할 경우
(example) ~/daweso😊 vi daweso/settings.py

# manage.py가 있는곳을 지나 daweso dir이 있는 곳에서 진입할 경우
(example) ~/daweso😊 vi settings.py

6-2. 설정 변경 Installed_Apps

settings.py 에는 여러가지 설정이 있는데 그 중 가장먼저 봐야할 것은 Installed_APPS이다.

사실 이 단계는 mysql에서 db를 만들기 전에 진행해도 된다.
why? 새로운 app을 만든걸 추가하는 거니까! (app은 한참 전에 만들었고)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'products'
]

아까 만든 app 이름을 입력해 주면 된다.

6-2. 새 database 설정

아래로 내려가다보면 DATABASES 에 관련된 dictionary 구조가 있다. 이걸 바꿔준다.

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

이 상태에서 변경 후

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'product',
        'USER': 'root',
        'PASSWORD': '!mysql비밀번호입력!',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

참고로 HOST에서 127.0.0.1 대신 localhost라고 적어도 된다.

6-3. runserver

runserver로 제대로 연동이 되었는지 확인한다. 역시 manage.py 가 있는 곳에서!

(example) ~/daweso😊 python manage.py runserver


runserver 상태에서 ctrl + c 누르면 서버 꺼진다



C.R.U.D는 2편에 이어서~

profile
🍎 🍊 🍋 🍏 🍇

2개의 댓글

comment-user-thumbnail
2021년 1월 22일

잘 보고 갑니다 채현님~ ❤️

1개의 답글