att
This commit is contained in:
parent
2fa715913e
commit
7292827c48
@ -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}")
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user