개발하는 두더지

[Django] Windows 10 + Pycharm + Django + MySQL DB 연동하기 본문

Django

[Django] Windows 10 + Pycharm + Django + MySQL DB 연동하기

덜지 2017. 5. 29. 22:46

Django에서 MySQL DB를 연동하기



설치 환경


Windows 10


Pycharm 2016.3.2


Python 3.6.0



진행 순서


 1. MYSQL DB 설치 & 데이터베이스 생성


MySQL 을 설치했다는 가정하에 진행하겠습니다. 


설치파일 링크 ( https://dev.mysql.com/downloads/installer/ )




MySQL Workbench 에 계정 로그인 한 상태에서 진행하겠습니다.


저는 처음에 만든 root 계정으로 로그인한 상태입니다.


유저 생성 방법

1. 유저 생성

2. 권한 부여

3. 갱신



외부에서 접속할 수 있는 유저 생성 방법



그리고 settings.py  db 호스트 입력란에  자신의 IP(고유 IP 또는 도메인)를 입력하면 접속된다.




Query 입력란에 아래의 명령어를 입력합니다.


create database blog;


blog 라는 데이터베이스를 만들고 시작하겠습니다.

 


위의 쿼리를 실행하면 server blog 라는 데이터베이스가 생성이 됬고, 테이블이 비어있습니다.




( 사진을 미리찍어서...   blog 라는 데이터베이스가 생성되야합니다)



2. Django 프로젝트를 생성


File -> New Project 를 실행하여 Django 프로젝트를 생성합니다.



클린한 상태의 프로젝트입니다.





3. MySQL 설치
File -> Settings 를 클릭합니다.




Project : 프로젝트명

Project Interpreter 를 클릭하고 오른쪽에 + 를 클릭합니다.



구글에 django mysql 연동이라고 치면 mysql-python 을 설치하라고 검색되서 검색하여 설치를 시도했습니다.




설치가 실패했다고 나옵니다.




자세히봤지만 정확한 원인을 모르겠습니다.



터미널에서 직접 명령어를 입력했는데 다른 에러가 나옵니다.



Python Console에서 인코딩 상태를 봤지만 UTF-8로 출력됩니다.




다시 구글검색한 결과 문제점을 찾았습니다.


MySQL DB API Drivers

The Python Database API is described in PEP 249. MySQL has three prominent drivers that implement this API:

  • MySQLdb is a native driver that has been developed and supported for over a decade by Andy Dustman.
  • mysqlclient is a fork of MySQLdb which notably supports Python 3 and can be used as a drop-in replacement for MySQLdb. At the time of this writing, this is the recommended choice for using MySQL with Django.
  • MySQL Connector/Python is a pure Python driver from Oracle that does not require the MySQL client library or any Python modules outside the standard library.

All these drivers are thread-safe and provide connection pooling. MySQLdb is the only one not supporting Python 3 currently.

In addition to a DB API driver, Django needs an adapter to access the database drivers from its ORM. Django provides an adapter for MySQLdb/mysqlclient while MySQL Connector/Python includes its own.


MySQLdb

Django requires MySQLdb version 1.2.3 or later.

At the time of writing, the latest release of MySQLdb (1.2.5) doesn’t support Python 3. In order to use MySQLdb under Python 3, you’ll have to install mysqlclient instead.


mysqlclient

Django requires mysqlclient 1.3.3 or later. mysqlclient should mostly behave the same as MySQLdb.


MySQLdb 는 Pyhton 3 에서 지원하지 않는다는 내용입니다.

MySQLdb를 사용하기 위해서는 Python 3 아래 버전을 사용해야한다고...

대신 mysqlclient 를 설치하라고 나옵니다.


위에 써있듯이 현재 Django 공식 문서를 쓰는 현재 MySQL을 이용하기 위해서는 mysqlclient를 설치하기를 추천한다고 합니다


mysqlclient를 다시 설치해보겠습니다.

mysqlclient 를 다시 검색하여 Install 합니다.




성공적으로 설치가 되었습니다.




4. StartApp 

장고 프로젝트를 만들었으니 Site를 하나 생성해야합니다.


Tools -> Run manage.py Task 를 클릭합니다.






startapp 사이트명

 입력하고 엔터를 누릅니다.

저는 blog 사이트를 만들었습니다.

그러면 프로젝트 폴더 트리에 blog가 생성됬음을 확인할 수 있습니다.





5. Settings

사이트를 생성했으니 settings.py 에 반드시 입력해야합니다.

아니면 DB 생성도 불가능하며 사이트에 접근할 수 없습니다.





이제 DB를 변경해보도록 하겠습니다.

아래보시는 화면은 Django 프로젝트를 만들면 기본적으로 sqlite3 가 연결되어 있습니다.




우리는 이제 MySQL을 연결해보겠습니다.

아래와 같이 입력합니다.

-데이터베이스 이름

-계정

-패스워드

-Host




6. 서버 구동

이제 서버를 구동시켜봅니다.


오른쪽 상단에 초록색 시작버튼을 누르거나



Run -> Run을 눌러서 나온화면에서 Django 프로젝트명이 써있는 버튼을 클릭하면 됩니다.





간혹 아래와 같은 에러 메시지가 출력될 때가 있습니다.

구글 검색을 해보면 Windows 10의 버그라고 말합니다. 

저도 정확한 원인을 모르기때문에 혹시 아시는 분 있으면 댓글로 남겨주시면 감사하겠습니다.




해결방안은 있습니다.

Run -> Edit Configurations 를 클릭하고



No reload를 선택한후 OK를 클릭합니다.





다시 서버를 구동시키면 이제 서버가 구동됨을 확인할 수 있습니다.





7. 모델 만들기

blog 사이트의 models.py 파일을 Open 합니다.


간단하게 Model을 상속받은 Blog 클래스를 만들고 컬럼은 Title과 Content로 간단하게 만들었습니다.


다음 포스팅에서는 조금 더 재대로된 테이블로 만들겠습니다.





이제 DB 모델을 만들었으니 매핑을 시켜줘야합니다



Run manage.py Task를 클릭한 창에서 아래의 명령어를 입력합니다


makemigrations



migrate

그리고 migrate를 해야합니다.

migration이란 장고가 모델과 데이터베이스 스키마 등을 파일 형태로 저장한다는 그런 개념입니다.

그리고 model이 변경될때마다 반드시 migration을 해야합니다.





8. Workbench로 테이블 확인하기


워크벤치로 돌아와서 스키마탭을 새로고침하면


blog_blog라는 테이블이 생성됨을 확인할 수 있습니다.

클릭해보면 아까 모델에서 만든 Title과 Content 를 보실수 있습니다.

id는 django에서 유용하게 쓰이므로 나중 포스팅때 다시 설명하겠습니다.







Comments