From 7292827c48916586dd2a558c3c4e8718fa84fe94 Mon Sep 17 00:00:00 2001 From: "daniel.rodrigues" Date: Mon, 26 Jan 2026 08:34:04 -0300 Subject: [PATCH] att --- rgb_products.py | 52 +++++++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/rgb_products.py b/rgb_products.py index a9111d6..7d162fb 100644 --- a/rgb_products.py +++ b/rgb_products.py @@ -60,7 +60,11 @@ def get_token(): # ============================== def insert_items_to_db(cursor, items): - """Insere uma lista de itens no banco de dados""" + """Insere uma lista de itens no banco de dados, deletando SKUs existentes antes""" + + # Query para deletar SKU existente + delete_query = "DELETE FROM [dbo].[rgb_product] WHERE [sku] = ?" + insert_query = """ INSERT INTO [dbo].[rgb_product] ( [sku], [marketId], [tacticId], [strategicId], [brand], [internalCode], @@ -71,10 +75,19 @@ def insert_items_to_db(cursor, items): """ inserted = 0 + deleted = 0 for item in items: try: + sku = item.get("id") + + # 1. Deletar SKU se já existir + cursor.execute(delete_query, sku) + if cursor.rowcount > 0: + deleted += cursor.rowcount + + # 2. Inserir o novo registro cursor.execute(insert_query, - item.get("id"), + sku, item.get("marketId"), item.get("tacticId"), item.get("strategicId"), @@ -101,6 +114,10 @@ def insert_items_to_db(cursor, items): if stats["errors"] <= 5: print(f" ✗ Erro ao inserir SKU {item.get('id')}: {e}") + # Atualizar estatística de deletados + with stats_lock: + stats["skus_updated"] = stats.get("skus_updated", 0) + deleted + return inserted @@ -204,7 +221,7 @@ def fetch_and_insert_all_products(token): "items_downloaded": 0, "items_inserted": 0, "errors": 0, - "deleted": 0 + "skus_updated": 0 # SKUs que já existiam e foram atualizados } # 1. Descobrir o total de produtos @@ -233,32 +250,7 @@ def fetch_and_insert_all_products(token): conn = pyodbc.connect(DB_CONNECTION_STRING) cursor = conn.cursor() - # Verificar e deletar dados existentes para a data de ontem - print(f" Verificando dados existentes para {yesterday}...") - - # A coluna updatedAt está no formato: 2025-10-26 11:38:46.0000000 -03:00 - # Usamos CAST para comparar apenas a parte da data - check_query = """ - SELECT COUNT(*) FROM [dbo].[rgb_product] - WHERE CAST([updatedAt] AS DATE) = ? - """ - cursor.execute(check_query, yesterday) - existing_count = cursor.fetchone()[0] - - if existing_count > 0: - print(f" ⚠ Encontrados {existing_count} registros para {yesterday}. Deletando...") - delete_query = """ - DELETE FROM [dbo].[rgb_product] - WHERE CAST([updatedAt] AS DATE) = ? - """ - cursor.execute(delete_query, yesterday) - deleted = cursor.rowcount - conn.commit() - stats["deleted"] = deleted - print(f" ✓ {deleted} registros deletados") - else: - print(f" ✓ Nenhum registro existente para {yesterday}") - + print(f" Estratégia: Deletar SKU existente antes de inserir (upsert)") print(f" Iniciando download e inserção...\n") # Lock para acesso ao banco (uma conexão compartilhada) @@ -328,11 +320,11 @@ if __name__ == "__main__": print(f"\n{'='*60}") print("RESUMO FINAL") print(f"{'='*60}") - print(f" Registros deletados: {result.get('deleted', 0)}") print(f" Páginas baixadas: {result['pages_downloaded']}") print(f" Páginas com falha: {result['pages_failed']}") print(f" Itens baixados: {result['items_downloaded']}") print(f" Itens inseridos: {result['items_inserted']}") + print(f" SKUs atualizados: {result.get('skus_updated', 0)} (já existiam)") print(f" Erros de inserção: {result['errors']}") print(f"{'='*60}")