Python批量插入数据库表数据

2023-12-13 04:35:01
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)
  1. 根据Word1和Word2的值拼接SQL语句,查询名为t_mercadolibre_sift的表,获取符合条件的sku和title列。
  2. 将查询结果中的sku保存到列表中,并根据这些sku查询t_mercadolibre_tag_sub_mapping表中已存在的sku和tag_id组合。
  3. 对查询结果进行处理,去除重复的sku行,并将剩余的数据分批插入t_mercadolibre_tag_sub_mapping表中,每批次的数据包括sku、tag_id和update_time字段。

文章来源:https://blog.csdn.net/EaSoNgo111/article/details/134954391
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。