import pandas as pd
from sql_connector import ConnectorJavaTest
from datetime import datetime
# 读取Excel表格
df = pd.read_excel(r'C:\Users\wangkejun\Desktop\MX.xlsx')
results = []
# 创建一个空的DataFrame
data = pd.DataFrame(columns=['sku', 'tag_id', 'update_time'])
# 遍历数据框中的每一行,逐行处理
for index, row in df.iterrows():
# 获取Word1和Word2值
word1 = row['Word1'].capitalize()
word2 = row['Word2'].capitalize()
# 拼接SQL语句,查询t_mercadolibre_sift表,获取sku和title列
query = f"SELECT sku, title FROM t_mercadolibre_sift WHERE title LIKE '%{word1}%' AND title LIKE '%{word2}%'"
results = ConnectorJavaTest().read_sql(query)
print(results)
# 获取查询结果,并将sku保存到列表中
skus = list(set(results['sku']))
print(len(skus))
# 如果查询结果非空,则继续进行操作
if skus:
# 查询目标表中已存在的sku和tag_id组合
if len(skus) == 1:
existing_data_query = f"SELECT sku, tag_id FROM t_mercadolibre_tag_sub_mapping WHERE sku = {skus[0]} AND tag_id = 83"
else:
existing_data_query = f"SELECT sku, tag_id FROM t_mercadolibre_tag_sub_mapping WHERE sku IN {tuple(skus)} AND tag_id = 83"
existing_data = ConnectorJavaTest().read_sql(existing_data_query)
# 去除重复的sku行,并只保留一行
skus = list(set(skus) - set(existing_data['sku']))
# 分批插入数据
batch_size = 1000
skus_batches = [skus[i:i + batch_size] for i in range(0, len(skus), batch_size)]
# 创建新的行
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
for sku_batch in skus_batches:
# 将每个批次的数据转换成DataFrame格式
batch_data = pd.DataFrame({
'sku': sku_batch,
'tag_id': 83,
'update_time': current_time
})
# 将数据插入到目标表中
ConnectorJavaTest().to_sql(batch_data, table_name='t_mercadolibre_tag_sub_mapping', if_exists='append', index=False)
- 根据Word1和Word2的值拼接SQL语句,查询名为
t_mercadolibre_sift
的表,获取符合条件的sku和title列。 - 将查询结果中的sku保存到列表中,并根据这些sku查询
t_mercadolibre_tag_sub_mapping
表中已存在的sku和tag_id组合。 - 对查询结果进行处理,去除重复的sku行,并将剩余的数据分批插入
t_mercadolibre_tag_sub_mapping
表中,每批次的数据包括sku、tag_id和update_time字段。