티스토리 뷰
디버깅은 끝났으나 노가다를 했으므로 완벽하진 않았다.
python manage.py dumpdata taxi.recruit --natural-primary --exclude=contenttypes --exclude=auth.Permission --exclude=admin.logentry --exclude=sessions.session --indent 4 > initial_data.json
여기서 보았듯, 하나만 dumpdata 했을 때는 제대로 mysql로 변환되었다.
그러나 여러 번의 시도 결과, taxi.profile이 포함된 json파일을 dumpdata 후 loaddata하는 순간! 바로 오류가 떠버린다.
예전으로 돌아가봐야겠다.
예전에 django에서 profile을 확장할 때, 그러니까 기본 django의 user model을 사용할 때 추가적으로 사용자 정보를 추가하기 위해서 one-to-one 확장법을 선택했다.
따라한 사이트는 다음과 같다.
https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html#onetoone
이부분이 문제였던 것이다.
내 예상으로는 문제가 된 부분은 바로...
one-to-one 확장법을 사용하면, model.py에서 profile의 맨 처음에 user_id라는 field가 필요한데, auth_user(django 기본 user model)와 연결되있다는 정보를 집어 넣는 곳이다. 그래서 auth_user의 id값이 그곳에 들어간다. 자동적으로 auth_user가 사라지면 거기에 딸린 profile도 지워지도록 설정되는데 이것이 문제의 원인인 것 같다.
mysql로 loaddata를 하면, auth_user가 load됨과 동시에 새로운 profile이 만들어지는데, 다 default값으로 만들어진다. 그 다음에 profile을 load하려니 이미 default 값으로 만들어 진 것과 충돌하는 것이다. loaddata로 profile과 auth_user를 동시에 가져올 수 없어서 그렇게 된 것 같다.
내 예상이다.
여튼 그래서 나는 노가다를 택했다.
python manage.py dumpdata --natural-primary --exclude=contenttypes --exclude=auth.Permission --exclude=admin.logentry --exclude=sessions.session --exclude=taxi.profile --indent 4 > initial_data.json
taxi.profile을 dumpdata하지 않았다. 즉, taxi.profile 부분만 빼고 mysql에 저장을 해 놓은 다음 나머지는 일일히 profile에다 손으로 저장해준 것이다. 매우 비효율적이지만 다행히도 아직 사용자 수가 매우 적었기 때문에(20명) 가능할 수 있었다. 만약 사용자수가 많았다면... 난 매우 귀찮은 짓을 했어야 했다. 사용자가 적은 게 여기서 유용하다니!
(참고로 contenttype, permission, logentry, session 등은 옮길 필요가 없는 파일이다. mysql에도 자연히 생기는 파일들인 것 같다. empty set인 것도 있다)
그렇게 mysql로 데이터를 옮기는 작업이 끝났다.
mysql의 데이터를 주기적으로 백업하는 작업을 해놔야겠다. 예전에 데이터가 한 번 다 날아간 적이 있다. 그 때도 사용자가 적어서 좀 다행이었지만, 몇몇 사용자는 다시 가입해야 했던 일이 있었다. 데이터 백업의 중요성을 거기서 느끼고, 이번에 옮길 땐 혹시나 해서 여러 번 백업을 한 상태에서 옮겼다.
이제 데이터베이스 작업은 끝났다. 보안 작업만 하면 사이트는 안정화되고 조금 사이트 다워질 것이다. 그 후 바로 다른 앱을 개발할 것이다. 동시에 알림기능을 추가하고 mobile app도 발전시킬 것이다.
'gistalk 개발' 카테고리의 다른 글
django notification 사용하기 (1) (0) | 2018.01.22 |
---|---|
mysql 자동 백업하기 (0) | 2018.01.18 |
sqlite 데이터를 mysql 데이터로 변환하기 (2) (0) | 2018.01.17 |
sqlite 데이터를 mysql 데이터로 변환하기 (1) (1) | 2018.01.16 |
django에 myspl(database) 적용하기 (1) | 2018.01.15 |
- Total
- Today
- Yesterday
- MBCF
- 메모리기반
- pythonpython
- IBCF
- django mysql database sqlite
- memory-based
- queryset
- n core setting
- Python
- 협업필터링
- javascrip
- gensim
- windows subsystem for lunux
- 서버환경
- KAKAO
- Collaborative Filtering
- MachineLearning #KMenas #KoNLPy #Word2Vec #AI #ML #인공지능 #Unsupervised #Clustering #Classification
- Supervised Learning #KoNLPy #Keras #NLP #자연어처리 #글 분류 #LSTM
- item-based
- python3.8
- pytorch
- ifkakao
- 추천
- buffalo
- 아이템기반
- WSL2
- matrix market
- django
- matrix factorization
- django3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |