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)  函数取传入的相对应的索引位置

猜你喜欢

转载自blog.csdn.net/xiaofeixia666888/article/details/82689825