1.安裝mysql,本機使用的mysql安裝包是 mysql-installer-community-5.7.32.0.msi
2.下載mysql客戶端,本機使用客戶端是heidisql,連接到本地數據庫打開,建表。(建表后要刷新數據庫)
3.vscode編寫python腳本
import pandas as pd import pymysql import time import datetime config = {'host': '127.0.0.1','port': 3306,'user': 'root','passwd': '123456','db':'qxy','charset':'utf8mb4'} conn = pymysql.connect(**config) conn.autocommit(1) cursor = conn.cursor() #mysql導入數據 def into_mysql(sql,val): try: # 批量插入紀錄 cursor.execute(sql,val) except: import traceback traceback.print_exc() # 發生錯誤時會滾 conn.rollback() #修改數據 def update_mysql(sql,val): try: # 批量插入紀錄 cursor.execute(sql,val) except: import traceback traceback.print_exc() # 發生錯誤時會滾 conn.rollback() #查詢數據庫已有數據 def select_sql(query_data): cursor.execute(query_data) countAll = cursor.fetchall() data = pd.DataFrame(list(countAll)) return data #mysql導入excel數據 def in_mysql(val): try: # 批量插入紀錄 sql = "INSERT INTO order_3c_nj(ord_item_id,ord_id,sbmt_time,bill_tp_cd,gds_cd,str_cd,chnl_cd,vendor_cd,busi_chnl_cd,pay_amt,sal_qty,ord_src_cd,stl_cd,dlvr_plant_cd,dlvr_plant_nm,send_city_nm,gds_nm,ndtl_busi_chnl_cd,wl_box_code_qty,wl_price1,wl_price2,weight,volume,delivery_hour,creat_time) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" cursor.execute(sql,val) except: import traceback traceback.print_exc() # 發生錯誤時會滾 conn.rollback() #導入訂單數據 def excel_into_mysql(excel_data): len_excel_data = len(excel_data) creat_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())#創建時間 for i in range(len_excel_data): excel_data_1 = list(excel_data.iloc[i].values) excel_data_1.extend([creat_time]) excel_data_2 = tuple(excel_data_1) in_mysql(excel_data_1) print('進度: {:.2%}'.format(i/len_excel_data)) excel_data = pd.read_csv(r"F:\\0326.csv",encoding = "utf-8",delimiter="\t") excel_into_mysql(excel_data) #導入商品價值數據 def gds_price(sql,data): len_excel_data = len(data) creat_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())#創建時間 for i in range(len_excel_data): excel_data_1 = list(data.iloc[i].values) excel_data_1.extend([creat_time]) excel_data_2 = tuple(excel_data_1) into_mysql(sql,excel_data_2) print('進度: {:.2%}'.format(i/len_excel_data)) sql = "INSERT INTO goods_price(gds_cd,gds_price1,gds_price2,creat_time) VALUES (%s,%s,%s,%s)" data = pd.read_excel(r"C:\Users\86181\Desktop\文件\15消費電子前置倉\02計算數據\曉雨\sku成本.xlsx") i=1 gds_price(sql,data) #時間日期、周轉換 def data_week(): data_time_sql = "select id,sbmt_time from order_3c_nj where week IS NULL" data_time = select_sql(data_time_sql) data_time_1 = data_time data_time_2 = pd.concat([data_time_1, data_time_1[1].str.split(' ', expand=True)], axis=1) data_time_2.columns=['id','date_time','date','time'] data_time_3 = pd.concat([data_time_2, data_time_2["date"].str.split('-', expand=True)], axis=1) data_time_len = len(data_time_3) for i in range(data_time_len): id = str(data_time_3.iloc[i,0]) sbmt_time = data_time_3.iloc[i,1]#創建日期時間 date = data_time_3.iloc[i,2]#創建日期 time = data_time_3.iloc[i,3]#創建時間 year = data_time_3.iloc[i,4]#創建年 mo = data_time_3.iloc[i,5]#創建月 day = data_time_3.iloc[i,6]#創建日 week = datetime.date(int(year),int(mo),int(day)).isocalendar()[1] sql = "update order_3c_nj set date = %s,week = %s,time = %s WHERE id = '"+id+"'" val = (date,week,time) update_mysql(sql,val) print('進度: {:.2%}'.format(i/data_time_len)) data_week() #重量、采購金額轉換 def weight_price(): weight_sql = "select id,gds_cd,sal_qty,weight from order_3c_nj where price IS NULL" weight = select_sql(weight_sql) price = pd.read_excel(r"C:\Users\86181\Desktop\文件\15消費電子前置倉\02計算數據\曉雨\sku成本 - 副本.xlsx") weight[2]= weight[2].astype('float') weight[3]= weight[3].astype('float') weight[1]= weight[1].astype('str') price["sku"]= price["sku"].astype('str') weight["單位重量"] = weight[3]/weight[2] weight_price = pd.merge(weight,price, how='left', left_on=[1], right_on=["sku"]) weight_price["行金額"] = weight_price[2]*weight_price["中位數"] weight_price_1 = weight_price[[0,"單位重量","中位數","行金額"]] weight_price_1_len = len(weight_price_1) for i in range(weight_price_1_len): id = str(weight_price_1.iloc[i,0]) sku_weight = weight_price_1.iloc[i,1]#創建日期時間 sku_price = weight_price_1.iloc[i,2]#創建日期 price = weight_price_1.iloc[i,3]#創建時間 sql = "update order_3c_nj set sku_weight = %s,sku_price = %s,price = %s WHERE id = '"+id+"'" val = (sku_weight,sku_price,price) update_mysql(sql,val) print('進度: {:.4%}'.format(i/weight_price_1_len)) #線上數據處理抽取 def online_order(): order = pd.read_csv(r"C:\Users\86181\Desktop\文件\15消費電子前置倉\02計算數據\結果數據\非10渠道訂單數據匯總.csv") order_x = order.sample(frac=0.16, replace=True, random_state=1) order_x.to_excel(r"C:\Users\86181\Desktop\文件\15消費電子前置倉\02計算數據\結果數據\非10渠道訂單數據匯總1.xlsx") #線上成本計算 def all_data(): all_sql = "select * from order_3c_nj" all_data = select_sql(all_sql) target_data = pd.read_excel(r"C:\Users\86181\Desktop\文件\15消費電子前置倉\02計算數據\結果數據\非10渠道訂單數據匯總1.xlsx") price["sku"]= price["sku"].astype('str') all_data[2] = all_data[2].astype('str') target_data["訂單號"] = target_data["訂單號"].astype('str') target_data_price = pd.merge(all_data,target_data, how='right', left_on=[2], right_on=["訂單號"]) target_data_price.to_excel(r"C:\Users\86181\Desktop\文件\15消費電子前置倉\02計算數據\結果數據\O2O訂單數據匯總.xlsx")