def __init__(self): self._dbm = DbManager() return
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;