DevHyun

[DevHyun's Blog] 사용 SQL을 sqlite3(local)에서 가상database(mysql)로 변경해보자! 본문

Web/Django&Python Blog Projecct

[DevHyun's Blog] 사용 SQL을 sqlite3(local)에서 가상database(mysql)로 변경해보자!

D3V3L0P3R 2020. 10. 30. 19:46

 

* 상황설명

 

우선 sqlite3를 사용하다보니 pythonanywhere에서 배포 할때 문제가 생겼다.

pythonanywhere에서 배포하려면 pull을 해야하는데 이때 db.sqlite3 파일도 같이 pull 되어버려서

덮어씌어지는 현상이 발생하였다.

 

이렇게 되면 pythonanywhere에서 배포된 페이지에서 입력된 데이터들은, pull을 기점으로 local 데이터로 덮어씌어지게 된다.

 

예를들어

1. local(127.0.0.1)에서 테스트로 test / 1 이란 포스트를 올렸고, 이상태에서 github 로 push

2. devhyun.pythonanywhere.com 에서 테스트로 testtest / 2 란 포스트를 올린 뒤 github에서 pull

 

이렇게 되면 pythonanywhere에서 입력했던 testtest 포스트가 없어지고 local에서 입력한 test 포스트만 남게된다.

 

그래서 사용 db를 local(sqlite3)에서 pythonanywhere에서 제공하는 가상환경의 db(mysql)로 변경하기로 결심!

* 참고로 pythonanywhere에서는 mysql, Postgres 두가지를 제공한다.

 

이렇게 진행하였지만 mysql은 pythonanywhere에서 배포했을 때만 사용이 가능했다.

local에서는 devhyun.mysql.pythonanywhere-services.com 사이트에 접속 불가..

그래서 부득이하게 local에서는 sqlite3를 쓰고 pythonaywhere에서는 mysql 써야 할듯..

아직까지는 방법을 찾지 못하였음(20201030)

 

1. pythonanywhere - database에서 mysql 선택 후 비밀번호 설정

 

2. cretae database name에 사용하고 싶은 database 이름 설정

 

3. host address 및 user name 확인

 

 

 

2. settings.py에서 database 지정 부분 수정

 

 DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.mysql',
         'NAME': 'devhyun$devhyun',
         'USER': 'devhyun',
         'PASSWORD': '비밀번호',
         'HOST': 'devhyun.mysql.pythonanywhere-services.com',
         'PORT':	'3306'
     },
     'OPTIONS': {
             'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
         },
 }

 

3. pythonanywhere에 재배포

 

d3v3lop3r.tistory.com/18

 

[DevHyun's Blog] Pythonanywhere 에서 Git Project Pull 한 후 재배포 하기

장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다. tutorial.djangogirls.org/ko Blog App에서 수정사항이 있을경우 Pycharm에서 Commit-Push 한 후에 Pythonanywhere에서 pull 해줘야 동기화..

d3v3lop3r.tistory.com

 

4. db정보를 변경하였으니 migration 진행

 

5. pythonanywhere - console 창에서 makemigrations - migrate 진행

cd DevhyunDjangoBlog

source myvenv/bin/activate

python manage.py makemigrations Blog

python manage.py migrate Blog

* db 정보를 변경하였으니 makemigrations를 통해 migration을 준비한 후 migrate 진행

 

 

6. Table '테이블 명' already exists" 오류 발생

: pythonanywhere - database - your databases 에서 사용하고자하는 database의 console 시작(start a console on)

: mysql > show tables;

: mysql > drop table 테이블명;

: 모든 테이블 삭제 (데이터 베이스 초기화)

: 다시 migrate (makemigrations 해줄 필요까진 없음)

 

7. db를 변경하였으니 admin 계정도 새로 생성

python manage.py createsuperuser

 

8. You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. 에러 발생

: migration이 제대로 안되었으니 진행 후 createsuperuser 하라는 에러

: mysql console에서 show tables;로 확인해보니 admin, auth, contenttypes, sessions table이 생성되지 않았음

: 나는 migrate를 잘 진행했는데 저런 에러가 떠서 6번을 다시 진행했더니 해결 되었음 

 

9. 이후 db.sqlite3는 로컬에서만 사용하도록 gitignore 설정 진행하였음

: db.sqlite3는 git ignore file 만들면 자동으로 추가됨.

 

d3v3lop3r.tistory.com/40?category=818119

 

Pyhcarm에서 git ignore 파일 만들기!

pythonanywhere에서 pull 할때마다 db.sqlite3 파일이 덮어씌어 져서 데이터가 날아가곤 했다. Blog App의 DB를 pythonanywhere에서 제공하는 database 환경(mysql)으로 변경하였음! pythonanywhere에서는 잘 작동..

d3v3lop3r.tistory.com

 

 

Comments