import pandas as pd import mysql.connector """ Script para insertar márgenes en la tabla 'papel_impresion_margenes' en base a un archivo Excel. - Lee los papeles objetivo desde la hoja 'Papeles'. - Lee los tramos de márgenes desde la hoja 'Tramos'. - Elimina márgenes existentes de los papeles especificados. - Inserta nuevos tramos de márgenes para cada papel. Requiere: - Archivo Excel con hojas 'Papeles' y 'Tramos'. - Conexión activa a la base de datos MySQL. - Paquetes: pandas, mysql-connector-python Autor: IMN Fecha: 07/05/2025 """ # === CONFIGURACIÓN === RUTA_EXCEL = "Tramos papel.xlsx" DB_CONFIG = { "host": "82.223.102.252", "user": "erp-dev", "password": "Txhn75@10", "database": "erp-dev" } # === CARGAR DATOS DESDE EXCEL === df_papeles = pd.read_excel(RUTA_EXCEL, sheet_name="Papeles") df_tramos = pd.read_excel(RUTA_EXCEL, sheet_name="Tramos") ids_papeles = df_papeles['ID'].dropna().astype(int).unique().tolist() print("IDs de papeles cargados:", ids_papeles) # === CONEXIÓN A MYSQL === conn = mysql.connector.connect(**DB_CONFIG) cursor = conn.cursor() # === ELIMINAR MÁRGENES EXISTENTES === delete_query = f""" DELETE FROM papel_impresion_margenes WHERE papel_impresion_id IN ({', '.join(map(str, ids_papeles))}); """ cursor.execute(delete_query) print(f"Eliminadas entradas antiguas para {len(ids_papeles)} papeles.") # === ACTUALIZAR PRECIO TONELADA PARA CADA PAPEL === update_query = """ UPDATE lg_papel_impresion SET precio_tonelada = %s WHERE id = %s """ # Preparar los valores (precio, id) updates = [] for _, row in df_papeles.iterrows(): papel_id = int(row["ID"]) precio = float(row["Precio Tonelada"]) updates.append((precio, papel_id)) # Ejecutar actualizaciones cursor.executemany(update_query, updates) conn.commit() print(f"Actualizados {cursor.rowcount} precios en lg_papel_impresion.") # === PREPARAR DATOS NUEVOS === insert_query = """ INSERT INTO papel_impresion_margenes ( papel_impresion_id, paginas_min, paginas_max, margen, user_created_id, user_updated_id, is_deleted, deleted_at, created_at, updated_at ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, NOW(), NOW()) """ data = [] for papel_id in ids_papeles: for _, row in df_tramos.iterrows(): data.append(( papel_id, int(row["Páginas min"]), int(row["Páginas máx"]), float(row["%"]), 10, 10, 0, None )) # === INSERTAR NUEVOS REGISTROS === cursor.executemany(insert_query, data) conn.commit() # === FINALIZAR === print(f"Insertadas {cursor.rowcount} filas.") cursor.close() conn.close()