1.解决的问题

数据可能重多次插入,要求当一条数数据多次插入时,重复的数据做更新操作。

2.解决问题的思路

建表的时候设置主键索引
根据一行的数据生成一个加密后的值,将该值设置为主键列。

3.具体实现

1.建表语句

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

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐