fastapi-mariadb / alter_table.py
Moibe's picture
Primer alta
6dc5ac9
#!/usr/bin/env python3
"""Script para modificar la estructura de la tabla registro"""
from connection import get_connection
import sys
def modificar_tabla():
"""Modifica la tabla registro para agregar uid y cambiar id a INT"""
conn = get_connection()
if not conn:
print("❌ Error: No se pudo conectar a la base de datos")
sys.exit(1)
try:
cursor = conn.cursor()
print("🔨 Iniciando modificación de tabla...")
print("-" * 60)
# Paso 1: Verificar si la tabla existe
cursor.execute("SHOW TABLES LIKE 'registro'")
if not cursor.fetchone():
print("❌ Error: La tabla 'registro' no existe")
sys.exit(1)
print("✅ Tabla 'registro' encontrada")
# Paso 2: Crear tabla temporal con la nueva estructura
sql_tabla_nueva = """
CREATE TABLE `registro_new` (
`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID auto-incremental',
`uid` VARCHAR(255) UNIQUE COMMENT 'UID de Firestore',
`display_name` VARCHAR(255) COMMENT 'Nombre mostrado del usuario',
`pais` VARCHAR(255) COMMENT 'País del usuario',
`correo` VARCHAR(255) UNIQUE COMMENT 'Email del usuario',
`fecha_registro` DATETIME COMMENT 'Fecha de registro',
`usos` INT DEFAULT 0 COMMENT 'Cantidad de usos',
`prompt` VARCHAR(255) COMMENT 'Prompt utilizado',
`proveedor` VARCHAR(255) COMMENT 'Proveedor del servicio',
`seed` INT COMMENT 'Seed para generación',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Fecha de creación',
KEY `idx_uid` (`uid`),
KEY `idx_correo` (`correo`),
KEY `idx_pais` (`pais`),
KEY `idx_fecha_registro` (`fecha_registro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Tabla de registro de usuarios'
"""
cursor.execute(sql_tabla_nueva)
print("✅ Tabla temporal creada")
# Paso 3: Copiar datos de tabla antigua a nueva (si existen)
cursor.execute("SELECT COUNT(*) FROM `registro`")
count = cursor.fetchone()[0]
if count > 0:
cursor.execute("""
INSERT INTO `registro_new` (display_name, pais, correo, fecha_registro, usos, prompt, proveedor, seed, created_at)
SELECT display_name, pais, correo, fecha_registro, usos, prompt, proveedor, seed, created_at FROM `registro`
""")
print(f"✅ {count} registros migrados a tabla nueva")
else:
print("✅ No había registros para migrar")
# Paso 4: Eliminar tabla antigua
cursor.execute("DROP TABLE `registro`")
print("✅ Tabla antigua eliminada")
# Paso 5: Renombrar tabla nueva
cursor.execute("RENAME TABLE `registro_new` TO `registro`")
print("✅ Tabla nueva renombrada")
conn.commit()
# Verificar estructura final
cursor.execute("DESCRIBE `registro`")
columnas = cursor.fetchall()
print("\n📋 Nueva estructura de la tabla:")
print("-" * 60)
for col in columnas:
print(f" {col[0]:<20} {col[1]:<30} {col[2]}")
cursor.close()
conn.close()
print("\n✅ Modificación completada exitosamente")
except Exception as e:
print(f"❌ Error al modificar la tabla: {e}")
try:
cursor.execute("DROP TABLE IF EXISTS `registro_new`")
conn.commit()
except:
pass
sys.exit(1)
if __name__ == "__main__":
print("\n🔄 Modificando estructura de la BD...")
print("=" * 60)
modificar_tabla()
print("=" * 60)
print("\n⚠️ Recuerda actualizar models.py y funciones.py")