Spaces:
Sleeping
Sleeping
File size: 5,685 Bytes
79c0eb4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | import os
import sys
from sqlalchemy import text
from database import engine
def run_migrations():
print("Connecting to database...")
with engine.connect() as conn:
trans = conn.begin()
try:
# 1. Add estado_academico column to fact_rendimiento_academico
print("Adding column estado_academico to fact_rendimiento_academico...")
conn.execute(text("""
ALTER TABLE public.fact_rendimiento_academico
ADD COLUMN IF NOT EXISTS estado_academico VARCHAR(50);
"""))
# 2. De-duplicate fact_marketing
print("De-duplicating public.fact_marketing...")
conn.execute(text("""
DELETE FROM public.fact_marketing a USING public.fact_marketing b
WHERE a.id_hecho_mkt < b.id_hecho_mkt
AND a.id_modulo = b.id_modulo
AND a.id_tiempo = b.id_tiempo;
"""))
# Add constraint if not exists
print("Adding constraint uq_fact_marketing_modulo_tiempo...")
conn.execute(text("""
ALTER TABLE public.fact_marketing
DROP CONSTRAINT IF EXISTS unique_modulo_tiempo;
"""))
conn.execute(text("""
ALTER TABLE public.fact_marketing
DROP CONSTRAINT IF EXISTS uq_fact_marketing_modulo_tiempo;
"""))
conn.execute(text("""
ALTER TABLE public.fact_marketing
ADD CONSTRAINT uq_fact_marketing_modulo_tiempo UNIQUE (id_modulo, id_tiempo);
"""))
# 3. De-duplicate fact_rentabilidad (public.fact_rentabilidad)
print("De-duplicating public.fact_rentabilidad...")
conn.execute(text("""
DELETE FROM public.fact_rentabilidad a USING public.fact_rentabilidad b
WHERE a.id_hecho_rent < b.id_hecho_rent
AND a.id_categoria = b.id_categoria
AND a.id_tiempo = b.id_tiempo;
"""))
print("Adding constraint uq_fact_rentabilidad_categoria_tiempo...")
conn.execute(text("""
ALTER TABLE public.fact_rentabilidad
DROP CONSTRAINT IF EXISTS uq_fact_rentabilidad_categoria_tiempo;
"""))
conn.execute(text("""
ALTER TABLE public.fact_rentabilidad
ADD CONSTRAINT uq_fact_rentabilidad_categoria_tiempo UNIQUE (id_categoria, id_tiempo);
"""))
# 4. De-duplicate fact_rendimiento_academico
print("De-duplicating public.fact_rendimiento_academico...")
conn.execute(text("""
DELETE FROM public.fact_rendimiento_academico a USING public.fact_rendimiento_academico b
WHERE a.id_hecho_aca < b.id_hecho_aca
AND a.id_estudiante = b.id_estudiante
AND a.id_modulo = b.id_modulo;
"""))
print("Adding constraint uq_fact_rendimiento_estudiante_modulo...")
conn.execute(text("""
ALTER TABLE public.fact_rendimiento_academico
DROP CONSTRAINT IF EXISTS uq_fact_rendimiento_estudiante_modulo;
"""))
conn.execute(text("""
ALTER TABLE public.fact_rendimiento_academico
ADD CONSTRAINT uq_fact_rendimiento_estudiante_modulo UNIQUE (id_estudiante, id_modulo);
"""))
# 5. De-duplicate fact_situacion_financiera
print("De-duplicating public.fact_situacion_financiera...")
conn.execute(text("""
DELETE FROM public.fact_situacion_financiera a USING public.fact_situacion_financiera b
WHERE a.id_hecho_fin < b.id_hecho_fin
AND a.id_estudiante = b.id_estudiante
AND a.id_tiempo = b.id_tiempo;
"""))
print("Adding constraint uq_fact_situacion_financiera_estudiante_tiempo...")
conn.execute(text("""
ALTER TABLE public.fact_situacion_financiera
DROP CONSTRAINT IF EXISTS uq_fact_situacion_financiera_estudiante_tiempo;
"""))
conn.execute(text("""
ALTER TABLE public.fact_situacion_financiera
ADD CONSTRAINT uq_fact_situacion_financiera_estudiante_tiempo UNIQUE (id_estudiante, id_tiempo);
"""))
# 6. De-duplicate fact_cobranzas_proyectadas
print("De-duplicating public.fact_cobranzas_proyectadas...")
conn.execute(text("""
DELETE FROM public.fact_cobranzas_proyectadas a USING public.fact_cobranzas_proyectadas b
WHERE a.id_hecho_cobro < b.id_hecho_cobro
AND a.id_estudiante = b.id_estudiante
AND a.id_tiempo = b.id_tiempo;
"""))
print("Adding constraint uq_fact_cobranzas_proyectadas_estudiante_tiempo...")
conn.execute(text("""
ALTER TABLE public.fact_cobranzas_proyectadas
DROP CONSTRAINT IF EXISTS uq_fact_cobranzas_proyectadas_estudiante_tiempo;
"""))
conn.execute(text("""
ALTER TABLE public.fact_cobranzas_proyectadas
ADD CONSTRAINT uq_fact_cobranzas_proyectadas_estudiante_tiempo UNIQUE (id_estudiante, id_tiempo);
"""))
trans.commit()
print("Migrations successfully applied!")
except Exception as e:
trans.rollback()
print(f"Error during migration: {e}")
sys.exit(1)
if __name__ == "__main__":
run_migrations()
|