ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 장고 DB에 파싱한 내용 담기
    web/Django 2019. 12. 4. 20:35

    지금 부터는 만들어둔 크롤러를 가지고 장고에 적용시켜 사용자가 원할 때 마다 해당 크롤러를

    작동시켜 장고 DB (Models) 에 추가 적용하는 것을 해볼 것이다.

    정리하면서 문제점이 보여 수정함

    문제점 1. 마감 & 매진의 좌석의 경우 크롤러가 파싱하지 않기 때문에 해당 시간 대와 좌석 정보가 빈 값으로 있음

    해결 : 파싱할 때 좌석의 마감 & 매진의 정보까지 불러와서 마감되거나 매진된 좌석을 정보를 확인 할 수 있음

     

    Models 만들기

     

    가장 먼저 해야할 일은 Models.py 에 가서 현재 내가 담고 싶은 객체들을 어떻게 담을지 정의 해 주는 것이다.

    해당 작업은 데이터베이스에 테이블을 생성하고 해당 테이블에 어떻게 넣을지 정의하는 것이 라고 볼수 있으며

    테이블은 class로 정의한다

    다음과 같이 정의 하였으며 

    초록색 박스는 : 테이블

    빨간색 박스는 : 컬럼

    이라고 생각하면 됨

     

    위에서 CharField는 말그대로 문자열을 받으며 최대 수는 50글자로 설정하는 것과 같으며 null값은 허용시켜 놓은 상태이다.

    이렇게 models의 구조를 추가 또는 변경했다면 

    makemigrtions -> migrate 를 통해서 데이터베이스에 변경사항을 저장해주는 과정이 필요함

     

     

    크롤러 함수형태로 변경 후 장고 구동환경 만들어 주기

     

    이제부터는 데이터를 불러오고 장고의 DB에 담아주기 위해서 해당 크롤러의 환경을 장고의 API등 장고의 기능들이

    동작할 수 있는 환경을 만들어 주어야 한다.

    그렇기 위해서는 몇가지 사전 작업들이 필요하다.

    1. 크롤링 하는 코드를 함수로 바꾸어 주어서 따로 import해서 사용가능하게 해주는 작업

    2. 장고 사용가능한 환경 만들어 주기

    3. 불러온 장고를 가지고 ORM이라는 Model API를 사용해 데이터 CRUD

     

     

    2. 환경 세팅

    import os
    ## Python이 실행될 때 DJANGO_SETTINGS_MODULE이라는 환경 변수에 현재 프로젝트의 settings.py파일 경로를 등록합니다.
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cgv_web.settings")
    ## 이제 장고를 가져와 장고 프로젝트를 사용할 수 있도록 환경을 만듭니다.
    import django
    django.setup()
    from cgv_cr.models import Cgv_data
    import time

    다음과 같이 Import 하여 세팅해 줄 수 있는데

    가장 먼저 파이썬 내장 os 모듈을 불러와서 

    장고의 환경변수에 현재 프로젝트의 setting.py의 파일을 등록한다.

    장고를 import해서 프로젝트 사용 환경을 만들어 준 뒤

    django.setup()

    다음으로는 모델에서 정의한 객체를 불어올 차례이다 

     

     

    장고 ORM 사용 테이터 베이스에 내용 CRUD

     

    이제 데이터를 담을 테이블을 정의해 주고 장고를 불러왔으니 본격적으로 데이터를 담아줄 차레이다

    데이터를 DB로 쏴줄 때에는 장고에서 ORM이라는 기능을 제공해서 해당 API 를 사용해서 손쉽게

    DB를 사용할 수 있는 쿼리문을 작성해 준다.

    참조 : http://pythonstudy.xyz/python/article/310-Django-%EB%AA%A8%EB%8D%B8-API

     

    예제로 배우는 파이썬 프로그래밍 - Django 모델 API

    1. Django 모델 API 앞의 Django 모델에서처럼 모델 클래스를 정의하게 되면, Django는 데이타를 추가/갱신하고 읽어 들일 수 있는 다양한 데이타베이스 API 들을 자동으로 제공한다. 이러한 기능은 Django가 ORM 서비스를 기본적으로 제공함에 따른 것으로 데이타베이스를 편리하게 핸들링할 수 있게 도와준다. 2. INSERT 데이타를 삽입하기 위해서는 먼저 테이블에 해당하는 모델(Model Class)로부터 객체를 생성하고, 그 객체의

    pythonstudy.xyz

     

    위의 사용법을 참조해서 DB에 어떠한 방식으로 CRUD를 할 것 인지 생각해보자

     

    내가 생각한 방식은 가장먼저 날짜를 기준으로 데이터를 INSERT 하는 것이다.

    제공할 페이지는 오늘의 영화정보를 제공해주기 위한 목적으로 만들기 때문에 

    INSERT 할 때에는 날짜가 새로 갱신되었을때 모든 정보를 DB에 추가해 줄 것이다.

    또한 추가 적으로 전의 날짜는 필요가 없이 때문에 삭제해줄 것 이다.

    최상단의 박스에서는 해당 모듈이 만약 다른 위치에서 import 될 경우에는 아래의 구문 들을 실행하지 않겠다는 의미

    두번째 박스에서는 크롤러함수를 불러와서 retrun 값을 get_cgv_data 라는 객체에 담아 주었음

    세번째 박스에서는 ORM을 사용해서 DB에 접근해 데이터를 select 하는 구문

    # DB에 저장된 날짜와 오늘의 날짜가 일치하는 데이터 가져오기

    네번째 박스는 날짜가 일치하는 데이터가 없으면 기존의 DB 내용 즉 전날의 상영정보 삭제 

    다섯번째 박스는 삭제해서 빈 DB에 새롭게 받아온 오늘의 영화 상영정보 INSERT

     

    위와 같은 방법을 통해서 데이터를 추가하고 필요없는 데이터를 삭제하였다.

     

     

    그렇다면 이제 날짜가 겹치는 경우에는 어떻게 할 것 인가 ?

    날짜가 겹칠 경우에는 기존의 데이터와 비교후 

    기존 데이터 베이스의 이름 , 상영 시간, 상영관 등의 정보와 == 새롭게 받아온  데이터 베이스의 이름 , 상영 시간, 상영관 등의 정보와 일치하고 좌석의 정보가 다를 경우 좌석의 정보만 업데이트

    하는 방식으로 접근해 볼 것 이다

    다음과 같은 구문으로 filter 기능을 사용해 설정한 조건과 같은 값을 빼온 뒤 

    해당 조건에 해당하는 데이터의 좌석정보 최신화

     

     

    이제 데이터 베이스에 담는  것 까지 해보았으니 해당 파일을 실행해보자

     기존의 장고 admin 페이지 

     

    크롤러 파일 실행

    다음과 같이 성공적으로 추가되는 것을 볼 수 있다.

    댓글

Designed by Tistory.