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