示例#1
0
 def __init__(self):
     self._dbm = DbManager()
     return
示例#2
0
class DbSeoulSubway:

    _dbm = None
    _tempConn = None

    def __init__(self):
        self._dbm = DbManager()
        return

    # API 용 테이블들을 생성한다. 없을시에만 생성.
    def init_api_service_tables(self):

        conn = self._dbm.get_connection_apidata_subway()
        if conn is None:
            _log.error("Failed to init api service by connection is invalid")
            return False

        cursor = conn.cursor()
        for name, ddl in _TABLES.iteritems():
            try:
                _log.info("Creating table {}: ".format(name))
                cursor.execute(ddl)
            except mdb.Error as err:
                _log.error(err)
            else:
                _log.info("Table Created success. {}".format(name))

        cursor.close()
        conn.close()
        return True

    # Open DbConnection For batch
    def open_api_service_connection(self):
        self._tempConn = self._dbm.get_connection_apidata_subway()
        if self._tempConn is None:
            _log.error("Failed to init api service by connection is invalid")
            return False
        return True

    # Close DbConnection For batch
    def close_api_service_connection(self, with_commit=False):
        if self._tempConn is None:
            self._tempConn = None
            return
        if with_commit is True:
            self._tempConn.commit()
        self._tempConn.close()

    # Truncate Tables of service
    def tables_truncate(self, svc_name):

        tb_name = _make_apidata_table_name(svc_name, True)

        if self._tempConn is None:
            raise DbSeoulSubwayException("Need call open_api_service_connection(), first")

        cursor = self._tempConn.cursor()
        try:
            _DML_ =  (" TRUNCATE `{}` ".format(tb_name))
            cursor.execute(_DML_, {})
        except mdb.Error as err:
            _log.warn("MySQL Table Truncate Failed: {}, {}"
                      .format(err, DbSeoulSubway.import_api_service_data.func_code) )
        cursor.close()

    # Service 별로 데이타를 INSERT 한다.
    def import_api_service_data(self, svc_name, rows):

        if self._tempConn is None:
            raise DbSeoulSubwayException("Need call open_api_service_connection(), first")

        cursor = self._tempConn.cursor()

        try:
            for x in rows :
                if svc_name == SB_SERVICE.SVC_SEARCHSTNBYSUBWAYLINESERVICE:
                    param = {
                      'STATION_CD': x["STATION_CD"],            # 전철역코드
                      'FR_CODE':    x["FR_CODE"],               # 외부코드
                      'STATION_NM': x["STATION_NM"],            # 전철역명
                      'LINE_NUM':   x["LINE_NUM"],              # 호선
                    }
                    _log.debug(_DML_INSERT_[svc_name], param)
                    cursor.execute(_DML_INSERT_[svc_name], param)
                elif svc_name == SB_SERVICE.SVC_SEARCHARRIVALTIMEOFLINE2SUBWAYBYIDSERVICE:
                    # TODO :  You Have todo....this.
                    """
                    """
                elif svc_name == SB_SERVICE.SVC_SEARCHSTNTIMETABLEBYIDSERVICE:
                    param = {
                      'LINE_NUM'    : x["LINE_NUM"],            # 호선
                      'FR_CODE'     : x["FR_CODE"],             # 외부코드
                      'STATION_CD'  : x["STATION_CD"],          # 전철역코드
                      'STATION_NM'  : x["STATION_NM"],          # 전철역명
                      'TRAIN_NO'    : x["TRAIN_NO"],            # 열차번호

                      'ARRIVETIME'      : x["ARRIVETIME"],      # 도착시간
                      'LEFTTIME'        : x["LEFTTIME"],        # 출발시간
                      'ORIGINSTATION'   : x["ORIGINSTATION"],   # 출발지하철역코드
                      'DESTSTATION'     : x["DESTSTATION"],     # 도착지하철역코드

                      'SUBWAYSNAME'     : x["SUBWAYSNAME"],     # 출발지하철역명
                      'SUBWAYENAME'     : x["SUBWAYENAME"],     # 도착지하철역명

                      'WEEK_TAG'        : x["WEEK_TAG"],        # 요일
                      'INOUT_TAG'       : x["INOUT_TAG"],       # 상/하행선
                      'FL_FLAG'         : x["FL_FLAG"],         # 플러그
                      'DESTSTATION2'    : x["DESTSTATION2"],    # 도착역 코드2
                      'EXPRESS_YN'      : x["EXPRESS_YN"],      # 급행선
                      'BRANCH_LINE'     : x["BRANCH_LINE"],     # 지선
                    }
                    _log.debug(_DML_INSERT_[svc_name], param)
                    cursor.execute(_DML_INSERT_[svc_name], param)
                elif svc_name == SB_SERVICE.SVC_SEARCHVIASTNARRIVALTIMEBYTRAINSERVICE:
                    param = {
                        'TRAIN_NO'  : x["TRAIN_NO"],              # 열차번호
                        'STATION_CD': x["STATION_CD"],            # 전철역코드
                        'FR_CODE':    x["FR_CODE"],               # 외부코드
                        'STATION_NM': x["STATION_NM"],            # 전철역명
                        'SUBWAYENAME'     : x["SUBWAYENAME"],     # 도착지하철역명
                        'ARRIVETIME'      : x["ARRIVETIME"],      # 도착시간
                        'WEEK_TAG'        : x["WEEK_TAG"],        # 요일
                        'INOUT_TAG'       : x["INOUT_TAG"],       # 상/하행선
                    }
                    _log.debug(_DML_INSERT_[svc_name], param)
                    cursor.execute(_DML_INSERT_[svc_name], param)
                else:
                    raise DbSeoulSubwayException("This Service is undefined.", svc_name)
        except mdb.Error as err:
            _log.warn("MySQL Data Insert Failed: {}, {}"
                      .format(err, DbSeoulSubway.import_api_service_data.func_code) )

        cursor.close()
        self._tempConn.commit()


    # 모든 지하철역 코드를 반환한다.
    def get_all_staticon_code(self):
        if self._tempConn is None:
            raise DbSeoulSubwayException("Need call open_api_service_connection(), first")

        cursor = self._tempConn.cursor()

        try:
            _DML_SELECT_ =  (
                " SELECT STATION_CD FROM `{}` ORDER BY STATION_CD "
                .format(_make_apidata_table_name(SB_SERVICE.SVC_SEARCHSTNBYSUBWAYLINESERVICE, True)) )

            cursor.execute(_DML_SELECT_, {})
            rows = cursor.fetchall()
            outlist = []
            for row in rows:
                s_cd = row[0]
                outlist.append(s_cd)
                _log.debug(" SELECT STATION_CD : {}".format(s_cd))

        except mdb.Error as err:
            _log.warn("MySQL Data Insert Failed: {}, {}"
                      .format(err, DbSeoulSubway.import_api_service_data.func_code) )

        cursor.close()
        return outlist;

    # 모든 TRAIN_NO를 반환한다.
    def get_all_train_no(self):
        if self._tempConn is None:
            raise DbSeoulSubwayException("Need call open_api_service_connection(), first")

        cursor = self._tempConn.cursor()

        try:
            _DML_SELECT_ =  (
                " SELECT DISTINCT TRAIN_NO FROM `{}` ORDER BY TRAIN_NO "
                .format(_make_apidata_table_name(SB_SERVICE.SVC_SEARCHSTNTIMETABLEBYIDSERVICE, True)) )

            cursor.execute(_DML_SELECT_, {})
            rows = cursor.fetchall()
            outlist = []
            for row in rows:
                s_cd = row[0]
                outlist.append(s_cd)
                _log.debug(" SELECT DISTINCT TRAIN_NO : {}".format(s_cd))

        except mdb.Error as err:
            _log.warn("MySQL Data Insert Failed: {}, {}"
                      .format(err, DbSeoulSubway.import_api_service_data.func_code) )

        cursor.close()
        return outlist;