att
This commit is contained in:
parent
2fa715913e
commit
7292827c48
@ -60,7 +60,11 @@ def get_token():
|
|||||||
# ==============================
|
# ==============================
|
||||||
|
|
||||||
def insert_items_to_db(cursor, items):
|
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_query = """
|
||||||
INSERT INTO [dbo].[rgb_product] (
|
INSERT INTO [dbo].[rgb_product] (
|
||||||
[sku], [marketId], [tacticId], [strategicId], [brand], [internalCode],
|
[sku], [marketId], [tacticId], [strategicId], [brand], [internalCode],
|
||||||
@ -71,10 +75,19 @@ def insert_items_to_db(cursor, items):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
inserted = 0
|
inserted = 0
|
||||||
|
deleted = 0
|
||||||
for item in items:
|
for item in items:
|
||||||
try:
|
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,
|
cursor.execute(insert_query,
|
||||||
item.get("id"),
|
sku,
|
||||||
item.get("marketId"),
|
item.get("marketId"),
|
||||||
item.get("tacticId"),
|
item.get("tacticId"),
|
||||||
item.get("strategicId"),
|
item.get("strategicId"),
|
||||||
@ -101,6 +114,10 @@ def insert_items_to_db(cursor, items):
|
|||||||
if stats["errors"] <= 5:
|
if stats["errors"] <= 5:
|
||||||
print(f" ✗ Erro ao inserir SKU {item.get('id')}: {e}")
|
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
|
return inserted
|
||||||
|
|
||||||
|
|
||||||
@ -204,7 +221,7 @@ def fetch_and_insert_all_products(token):
|
|||||||
"items_downloaded": 0,
|
"items_downloaded": 0,
|
||||||
"items_inserted": 0,
|
"items_inserted": 0,
|
||||||
"errors": 0,
|
"errors": 0,
|
||||||
"deleted": 0
|
"skus_updated": 0 # SKUs que já existiam e foram atualizados
|
||||||
}
|
}
|
||||||
|
|
||||||
# 1. Descobrir o total de produtos
|
# 1. Descobrir o total de produtos
|
||||||
@ -233,32 +250,7 @@ def fetch_and_insert_all_products(token):
|
|||||||
conn = pyodbc.connect(DB_CONNECTION_STRING)
|
conn = pyodbc.connect(DB_CONNECTION_STRING)
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
|
|
||||||
# Verificar e deletar dados existentes para a data de ontem
|
print(f" Estratégia: Deletar SKU existente antes de inserir (upsert)")
|
||||||
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" Iniciando download e inserção...\n")
|
print(f" Iniciando download e inserção...\n")
|
||||||
|
|
||||||
# Lock para acesso ao banco (uma conexão compartilhada)
|
# Lock para acesso ao banco (uma conexão compartilhada)
|
||||||
@ -328,11 +320,11 @@ if __name__ == "__main__":
|
|||||||
print(f"\n{'='*60}")
|
print(f"\n{'='*60}")
|
||||||
print("RESUMO FINAL")
|
print("RESUMO FINAL")
|
||||||
print(f"{'='*60}")
|
print(f"{'='*60}")
|
||||||
print(f" Registros deletados: {result.get('deleted', 0)}")
|
|
||||||
print(f" Páginas baixadas: {result['pages_downloaded']}")
|
print(f" Páginas baixadas: {result['pages_downloaded']}")
|
||||||
print(f" Páginas com falha: {result['pages_failed']}")
|
print(f" Páginas com falha: {result['pages_failed']}")
|
||||||
print(f" Itens baixados: {result['items_downloaded']}")
|
print(f" Itens baixados: {result['items_downloaded']}")
|
||||||
print(f" Itens inseridos: {result['items_inserted']}")
|
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" Erros de inserção: {result['errors']}")
|
||||||
print(f"{'='*60}")
|
print(f"{'='*60}")
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user