1. 程式人生 > >MYSQL 批量插入資料 insert into ON DUPLICATE KEY UPDATE

MYSQL 批量插入資料 insert into ON DUPLICATE KEY UPDATE

#批量插入並根據重複資料進行處理
class DF_MYSQL(DBBase):
    #定義操作更新時間相關的方法
    #獲取上次更新的時間
    def __del__(self):
        #刪除物件時關閉連結
        self.mysql_cursor.close()
        self.connect.close()

    def update(self,df):
        #update  table_name對應的更新時間
        sql = "INSERT INTO rp_m_record (mobile,calling_num,sum,count,calling_name,type,area1,area,score) " \
              "VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s) " \
              "ON DUPLICATE KEY UPDATE sum = sum + VALUES (sum),count = count + VALUES (count),type = IF(FIND_IN_SET(VALUES (type),type) < 0,CONCAT(type,',',VALUES (type)),type)"
        i = 0
        L = []
        cols = ['mobile', 'calling_num', 'sum', 'count', 'calling_name', 'type', 'area1', 'area', 'score']
        df = df.ix[:, cols]
        list_df = df.values.tolist()
        for eachline_list in list_df:
            i = i + 1
            L.append(eachline_list)
            if i % 1000 == 0:
                try:
                    self.mysql_cursor.executemany(sql,L)
                except Exception as e:
                    jylog.info(e)
                    self.connect.rollback()
                else:
                    self.connect.commit()
                    L = []

        try:#將剩餘插入資料庫
            self.mysql_cursor.executemany(sql,L)
            self.connect.commit()
        except:
            self.connect.rollback()

 

VALUES (type)  函式取傳入的相對應的索引位置