数据可能重多次插入,要求当一条数数据多次插入时,重复的数据做更新操作。
2.解决问题的思路建表的时候设置主键索引
根据一行的数据生成一个加密后的值,将该值设置为主键列。
CREATE TABLE Model
(
[ID] [nvarchar](255) NOT NULL PRIMARY KEY,
[Import_Time] [nvarchar](255) NOT NULL,
[Sales_Organization] [nvarchar](255) NULL,
[Week] [nvarchar](255) NULL,
[Channel] [nvarchar](255) NULL,
[Channel_Code] [nvarchar](255) NULL,
[EAN] [nvarchar](255) NULL,
[Model] [nvarchar](255) NULL,
[Brand] [nvarchar](255) NULL,
[Description] [nvarchar](255) NULL,
[Date] [nvarchar](255) NULL,
[Stock] [nvarchar](255) NULL,
[Sellout] [nvarchar](255) NULL,
[TCL_Code] [nvarchar](255) NULL,
[Product_Code] [nvarchar](255) NULL,
[org_id] [nvarchar](255) NULL,
[Year] [nvarchar](255) NULL,
[Store_Code] [nvarchar](255) NULL,
[Store_Name] [nvarchar](255) NULL,
[Category] [nvarchar](255) NULL,
[Customer_Group] [nvarchar](255) NULL,
[City] [nvarchar](255) NULL
);
2.加密函数
# 加密函数
def encryption(str):
import hashlib
m = hashlib.md5(str.encode("utf-8"))
encrypted_data = m.hexdigest()
return encrypted_data
3.根据一行数据生成主键列
# 读取csv中的数据 tb = pd.read_csv(file_name, delimiter=",", header=0) # 对拼接后的一列数据中的每行调用 加密函数 tb['ID'] = (tb['Import_Time'].map(str) + tb['Week'].map(str) + tb['Channel'].map(str) + tb['Channel_Code'].map(str) + tb['EAN'].map(str) + tb['Model'].map(str) + tb['Description'].map(str) + tb['Date'].map(str) + tb['Stock'].map(str) + tb['Sellout'].map(str) + tb['TCL_Code'].map(str) + tb['Product_Code'].map(str) + tb['org_id'].map(str) + tb['Year'].map(str) + tb['Store_Code'].map(str) + tb['Store_Name'].map(str) + tb['Category'].map(str) + tb['Customer_Group'].map(str) + tb['City'].map(str)).map(encryption) # 保存的表中 tb.to_sql(name=tbname, con=engine, chunksize=1000, if_exists='append', index=None)



