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) 函式取傳入的相對應的索引位置