less than 1 minute read

Intro

  • recommand 페이지에 사용되는 데이터의 경우, 현재 csv파일에서 매번 읽어와 json형식으로 클라이언트에 전송해주고 있었다.

  • DB에 해당 데이터들을 넣어 전송하는쪽이 조금 더 빠르지 않을까 하는 생각이 들어 DB에 해당 데이터를 넣어 쿼리로 빼오는 방식으로 바꿔보고, 두개 사이의 시간 차이를 측정해보기로 했다.

DB에 초기 데이터 삽입

  • 다음의 명령으로 JSON/XML/YAML등의 데이터를 DB에 넣어줄수 있다.
    python manage.py loaddata 파일명
    
  • 다만, csv파일은 지원되지 않는 형식이므로 또다시 데이터를 가공했다.

  • 가공에 사용한 코드는 landmark_image_crawler 프로젝트의 Tools.py에 csv_to_initial_data_json이라는 함수로 만들어두었다.

no such table

개요

  • Django 서버에 있는 migrate폴더는 DB의 변경 이력을 저장하는 폴더이다.

  • 이번 프로젝트의 경우, 처음에는 DB를 사용할 계획이 없었기 때문에 데이터베이스 설계를 진행하지 않았다.

  • 이후 파일 업로드를 위해 이미지 파일을 저장하는 용도로서 ImageModel 테이블을 구성했다.

  • 이번에 각 csv파일에 해당하는 데이터를 테이블로 작성해 migration하자 이력처럼 남아있던 migrate폴더가 상당히 지저분해보여 migrate를 초기화시키기로 마음먹었다.

원인

  • migrate를 초기화시키는 방법으로 제시된 방법인 migrate폴더를 삭제 및, db.sqlite3 파일을 제거했다.

    • 이때 실수를 했는데, 제시한 글과 달리 __init__.py파일을 포함한 폴더 통째로 제거해버리는 실수를 저질렀다.
  • 그 결과, django.db.utils.OperationalError: no such table오류가 발생.

해결

  • models.py 파일과 admin.py 내의 모든 내용(다시말해, 작성해두었던 모든 테이블)을 지운 후 makemigration을 진행.

  • migrate -fake-initial 명령을 통해 간신히 복구해낼수 있었다.