class Owner_import( threading.Thread ): def __init__(self, list, name): threading.Thread.__init__(self) self.owner_list = list self.nams = name self.oracle = Oracle( user = "******", passwd = "hl_q" , host = "172.16.6.19:1521/HLSALES" ) #self.oracle = Oracle( user = "******", passwd = "WZCXK20AKGD0P0OL" , host = "172.16.6.114:1521/PROCINST" ) #self.mysql = Mysql( user = "******", passwd = "5664922ed6404022b4b192499dc56399" , host = "10.10.6.21", port = 6623, db = "biz_huadong", charset = 'utf-8' ) self.mysql = Mysql( user = "******", passwd = "123456" , host = "172.30.11.240", port = 3306, db = "biz_huadong", charset = 'utf8' ) # self.mysql = Mysql( user = "******", passwd = "5664922ed6404022b4b192499dc56399" , host = "10.10.6.21", port = 6623, db = "biz_huadong", charset = 'utf8' ) # new_table_field_name, old_field_name, transfer by function or null skip self.tup_list = [( "standard_house_id", "HSTANDARD_ID"), \ ( "name", "OWNER_NAME"), \ ( "phone", "MOBILE_PHONE"), \ ( "home_phone", "HOME_PHONE"), \ ( "office_phone", "OFFICE_PHONE" ), \ ( "owner_type", "OWNER_TYPE", "transfer_owner_type" ), \ ( "qq", "QQ" ), \ ( "STATUS", "IS_VALID"), \ ( "create_time", "CREATED_TIME", "date_time_transfer"), \ ( "creator_id", "CREATED_BY", "gen_create_id" ) \ ] self.track_tup_list = [( "owner_id", "OWNERINFO_MYSQL_PKID"), \ ( "phone", "", "select_phone"), \ ( "description", "TRACK_DESCRIPTION"), \ ( "creator_id", "creator_id", "gen_create_id"), \ ( "creator_name", "DESCRIPTION" ), \ ( "create_time", "CREATED_TIME", "timestamp_convert"), \ ( "org_code", "ORG_CODE"), \ ( "org_name", "ORG_SHORT_NAME"), \ ] def select_phone(self, owner): if owner['MOBILE_PHONE'] is not None: return owner['MOBILE_PHONE'] elif owner['HOME_PHONE'] is not None: return owner['HOME_PHONE'] elif owner['OFFICE_PHONE'] is not None: return owner['OFFICE_PHONE'] else: return None def timestamp_convert(self, owner): if owner['CREATED_TIME'] is not None: #return time.strftime("%Y-%m-%d %H:%M:%S", time.strptime(owner['CREATED_TIME'], "%Y%m%d%H%M%S")) #print(time.strptime(owner['CREATED_TIME'], "%Y%m%d%H%M%S")) #print(time.strftime("%Y-%m-%d %H:%M:%S", time.strptime(owner['CREATED_TIME'], "%Y%m%d%H%M%S"))) return time.strftime("%Y-%m-%d %H:%M:%S", time.strptime(owner['CREATED_TIME'], "%Y%m%d%H%M%S")) #return owner['CREATED_TIME'].strftime("%Y%m%d%H%M%S") return None def date_time_transfer(self, owner): if owner["CREATED_TIME"] is not None: return owner["CREATED_TIME"].strftime("%Y-%m-%d %H:%M:%S") return None def transfer_owner_type(self, owner): if owner["OWNER_TYPE"] == 0: return 0 else: return 3 def gen_create_id(self, owner): user_code = owner["USER_CODE"] if user_code == None or not user_code.isdigit(): return None return str( 1000000000000000 + int(user_code) ) def gen_sql_dict(self, owner, dict_mapping): sql_dict = {} for field_tup in dict_mapping: value = None if len(field_tup) <= 2: value = owner[ field_tup[1] ] elif len( field_tup ) > 2: fun = field_tup[2] value = getattr(self, fun)( owner ) if value is None: continue sql_dict[ field_tup[0] ] = value return sql_dict def check_standard_id( self, standard_id, oracle_pkid ): #check mysql exist sql = "select * from owner_info where standard_house_id = %d" %standard_id res = self.mysql.query_sql( sql ) if len(res) != 0: if len(res) > 1 : print('unexpected two tuples containing same standard_house_id' + standard_id) ORACLE_MYSQL_DICT[oracle_pkid]=res[0]['id'] #print(ORACLE_MYSQL_DICT[oracle_pkid]) return False #check is valud in hdic return True def check_ownerinfo_freshness(self, oracle_ownerinfo_pkid, logging) : logging.info("checking ownerinfo pkid, oracle pkid %s" % oracle_ownerinfo_pkid) sql = "select * from dm_temp where oracle_ownerinfo_pkid = %s" % oracle_ownerinfo_pkid res = self.mysql.query_sql(sql) if len(res) != 0: return False return True def run(self): self.batch( self.owner_list, self.name ) def batch_track(self, owner_track_list, i, logging) : error_fp = open("error/error.log." + str(i), "w") normal_fp = open("error/normal.log." + str(i), "w") for track in owner_track_list : dict = {} try: #pdb.set_trace() logging.info("begin to migration track, info %s" % track) #0. check if has migrated sql = "select * from dm_temp where oracle_track_pkid = %d" % track['TRACK_PKID'] res = self.mysql.query_sql( sql ) if len(res) != 0 : logging.warning("track pkid %s has been handled, skip." % track['TRACK_PKID']) continue #1. get oracle owner info pkid to new mysql owner info pkid sql = "select * from dm_temp where oracle_ownerinfo_pkid = %s and oracle_track_pkid is null" % track['OWNER_PKID'] res = self.mysql.query_sql( sql ) if len(res) == 0: logging.warning("HEAVY_ERROR. no mysql ownerinfo mapping relation find, ownerinfo oracle id is %s" % track['OWNER_PKID']) continue logging.info("begin to insert into mysql follow up track, info %s" % track) track['OWNERINFO_MYSQL_PKID']=res[0]['mysql_ownerinfo_pkid']#mysql_ownerinfo_pkid#ownerinfo_mysql_pkid dict = self.gen_sql_dict(track, self.track_tup_list) dict['status']='1' logging.info(dict) self.mysql.insert_dict(table = "owner_follow_up", argv=dict) logging.info("SUCCESS for new mysql follow up insert. oracle track pkid %s, data %s" % (track['TRACK_PKID'], dict)) #get mysql new pkid sql = "select max(id) as id from owner_follow_up where owner_follow_up.owner_id = %s" % track['OWNERINFO_MYSQL_PKID'] res = self.mysql.query_sql(sql) mysql_track_pkid = res[0]['id'] logging.info(res) #store relation in temp table temp_dict = {} temp_dict['oracle_ownerinfo_pkid']=track['OWNER_PKID'] temp_dict['oracle_track_pkid']=track['TRACK_PKID'] temp_dict['mysql_ownerinfo_pkid']=track['OWNERINFO_MYSQL_PKID'] temp_dict['mysql_followup_sh_id']=track['STANDARD_ID'] temp_dict['mysql_followup_pkid']=mysql_track_pkid #pdb.set_trace() self.mysql.insert_dict(table = "dm_temp", argv = temp_dict) logging.info("SUCCESS for ownerinfo follow up migration, oracle pkid %s, mysql pkid %s" % (track['TRACK_PKID'], mysql_track_pkid)) except Exception, e: pdb.set_trace() logging.warning("exception happens for ownerinfo follow up migration. oracle pkid %s. ERROR %s" % (track['TRACK_PKID'], e))
class Owner_import( threading.Thread ): def __init__(self, list, name): threading.Thread.__init__(self) self.owner_list = list self.nams = name self.oracle = Oracle( user = "******", passwd = "hl_q" , host = "172.16.6.19:1521/HLSALES" ) #self.oracle = Oracle( user = "******", passwd = "WZCXK20AKGD0P0OL" , host = "172.16.6.114:1521/PROCINST" ) #self.mysql = Mysql( user = "******", passwd = "5664922ed6404022b4b192499dc56399" , host = "10.10.6.21", port = 6623, db = "biz_huadong", charset = 'utf-8' ) self.mysql = Mysql( user = "******", passwd = "123456" , host = "172.30.11.240", port = 3306, db = "biz_huadong", charset = 'utf8' ) # self.mysql = Mysql( user = "******", passwd = "5664922ed6404022b4b192499dc56399" , host = "10.10.6.21", port = 6623, db = "biz_huadong", charset = 'utf8' ) # new_table_field_name, old_field_name, transfer by function or null skip self.tup_list = [( "standard_house_id", "HSTANDARD_ID"), \ ( "name", "OWNER_NAME"), \ ( "phone", "MOBILE_PHONE"), \ ( "home_phone", "HOME_PHONE"), \ ( "office_phone", "OFFICE_PHONE" ), \ ( "owner_type", "OWNER_TYPE", "transfer_owner_type" ), \ ( "qq", "QQ" ), \ ( "STATUS", "IS_VALID"), \ ( "create_time", "CREATED_TIME", "date_time_transfer"), \ ( "creator_id", "CREATED_BY", "gen_create_id" ) \ ] def date_time_transfer(self, owner): if owner["CREATED_TIME"] is not None: return owner["CREATED_TIME"].strftime("%Y-%m-%d %H:%M:%S") return None def transfer_owner_type(self, owner): if owner["OWNER_TYPE"] == 0: return 0 else: return 3 def gen_create_id(self, owner): user_code = owner["USER_CODE"] if user_code == None or not user_code.isdigit(): return None return str( 1000000000000000 + int(user_code) ) def gen_sql_dict(self, owner): sql_dict = {} for field_tup in self.tup_list: value = owner[ field_tup[1] ] if len( field_tup ) > 2: fun = field_tup[2] value = getattr(self, fun)( owner ) if value is None: continue sql_dict[ field_tup[0] ] = value return sql_dict def check_standard_id( self, standard_id, oracle_pkid ): global ORACLE_MYSQL_DICT #check mysql exist sql = "select * from owner_info where standard_house_id = %d" %standard_id res = self.mysql.query_sql( sql ) if len(res) != 0: if len(res) > 1 : print('unexpected two tuples containing same standard_house_id' + standard_id) ORACLE_MYSQL_DICT[oracle_pkid]=res[0]['id'] return False #check is valud in hdic return True def run(self): self.batch( self.owner_list, self.name ) def batch( self, owner_list, i): error_fp = open( "error/error.log." + str(i), "w" ) normal_fp = open( "error/normal.log." + str(i), "w" ) for owner in owner_list: dict = {} try: standard_id = owner["HSTANDARD_ID"] if not self.check_standard_id( standard_id, owner['PKID'] ): continue dict = self.gen_sql_dict( owner ) self.mysql.insert_dict( table = "owner_info", argv = dict ) normal_fp.write( str(dict["standard_house_id"]) + "\n" ) #check again to get newly inserted tuple id self.check_standard_id( standard_id, owner['PKID'] ) except Exception,e: error_fp.write( str( standard_id ) + "\n" ) error_fp.close() normal_fp.close()