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")
