[빅데이터 python] 웹 검색 엔진 만들기 – 4. InverseSql 클래스 정의

안녕하세요. 언제나휴일입니다.

이번에는 Inverse 테이블과 연동하는 InverseSql 클래스를 정의합시다.

1. 사용할 라이브러리

파이썬에서 MSSQL을 사용하려면 pymssql을 포함합니다.

데이터베이스와 연결하는 부분은 미리 작성한 SqlCon을 사용할 거예요.

import pymssql
from SqlCon import SqlCon

2. AddInverseItem – 역파일 요소 추가하기

제일 먼저 역파일 요소를 추가하는 메서드를 정의합시다.

class InverseSql:
    @staticmethod
    def AddInverseItem(wid,mid,rcnt):
        cursor = SqlCon.Cursor()

추가 쿼리 문자열을 작성합니다.

        query =str.format("Insert into Inverse(wid,mid,rcnt) values ({0},{1},{2})",wid,mid,rcnt)

쿼리를 실행하고 커밋을 수행하는 것을 시도합니다.

만약 예외가 발생하면 False를 반환하고 성공하면 True를 반환합니다.

        try:
            cursor.execute(query)
            SqlCon.Commit()
        except:
            return False
        else:
            return True

3. FindInv – 역파일 요소 찾기

형태소 일련 번호로 역파일 요소를 찾는 메서드를 작성합시다. 이 메서드를 통해 특정 단어를 포함하는 웹 페이지를 검색하는 것이 가능합니다.

    @staticmethod
    def FindInv(mid):

검색 결과를 보관할 컬렉션을 생성합니다.

        inv_col = list()

검색 쿼리 문자열을 작성하고 실행합니다.

        inv_col = list()
        cursor = SqlCon.Cursor()
        query = str.format("Select wid,rcnt from Inverse where mid={0}",mid)

검색 결과를 컬렉션에 추가한 후 반환합니다.

        row = cursor.fetchone()  
        while row:
            inv_col.append(row)
            row = cursor.fetchone()
        return inv_col

4. 전체 코드

#InverseSql.py
import pymssql
from SqlCon import SqlCon
class InverseSql:
    @staticmethod
    def AddInverseItem(wid,mid,rcnt):
        cursor = SqlCon.Cursor()
        query =str.format("Insert into Inverse(wid,mid,rcnt) values ({0},{1},{2})",wid,mid,rcnt)
        try:
            cursor.execute(query)
            SqlCon.Commit()
        except:
            return False
        else:
            return True
    @staticmethod
    def FindInv(mid):
        inv_col = list()
        cursor = SqlCon.Cursor()
        query = str.format("Select wid,rcnt from Inverse where mid={0}",mid)
        cursor.execute(query)
        row = cursor.fetchone()  
        while row:
            inv_col.append(row)
            row = cursor.fetchone()
        return inv_col