Diagnóstico y fix SQL Server: SERVERNAME, TDS_Version, Puerto explicitos
This commit is contained in:
64
backend/export_cartera.py
Normal file
64
backend/export_cartera.py
Normal file
@@ -0,0 +1,64 @@
|
||||
# export_cartera.py — Exporta TODA la tabla cartera_junta de Supabase a Excel/CSV.
|
||||
# Ejecutar dentro de backend/: python export_cartera.py
|
||||
import os, csv, requests
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
|
||||
URL = os.getenv("CARTERA_URL") or os.getenv("SUPABASE_PAUTA_URL", "")
|
||||
KEY = os.getenv("CARTERA_KEY") or os.getenv("SUPABASE_PAUTA_KEY", "")
|
||||
TABLA = os.getenv("SUPABASE_TABLA_CARTERA", "cartera_junta")
|
||||
HEAD = {"apikey": KEY, "Authorization": f"Bearer {KEY}"}
|
||||
|
||||
def traer_todo():
|
||||
filas, paso, desde = [], 1000, 0
|
||||
while True:
|
||||
r = requests.get(f"{URL}/rest/v1/{TABLA}",
|
||||
params={"select": "*", "offset": str(desde), "limit": str(paso)},
|
||||
headers=HEAD, timeout=120)
|
||||
r.raise_for_status()
|
||||
data = r.json()
|
||||
if not data:
|
||||
break
|
||||
filas.extend(data)
|
||||
print(f" descargadas {len(filas)} filas...")
|
||||
if len(data) < paso:
|
||||
break
|
||||
desde += paso
|
||||
return filas
|
||||
|
||||
print(f"Descargando '{TABLA}' de Supabase...")
|
||||
filas = traer_todo()
|
||||
print(f"Total: {len(filas)} filas")
|
||||
|
||||
if not filas:
|
||||
print("Sin datos. Revisa CARTERA_URL / CARTERA_KEY en .env")
|
||||
raise SystemExit
|
||||
|
||||
# columnas = union de todas las claves, en orden de la primera fila
|
||||
cols = list(filas[0].keys())
|
||||
for f in filas:
|
||||
for k in f.keys():
|
||||
if k not in cols:
|
||||
cols.append(k)
|
||||
|
||||
# 1) CSV siempre
|
||||
csv_path = "cartera_junta_export.csv"
|
||||
with open(csv_path, "w", newline="", encoding="utf-8-sig") as fout:
|
||||
w = csv.DictWriter(fout, fieldnames=cols)
|
||||
w.writeheader()
|
||||
for f in filas:
|
||||
w.writerow({c: f.get(c, "") for c in cols})
|
||||
print(f"CSV generado: {csv_path}")
|
||||
|
||||
# 2) Excel si openpyxl esta disponible
|
||||
try:
|
||||
from openpyxl import Workbook
|
||||
wb = Workbook(); ws = wb.active; ws.title = "cartera_junta"
|
||||
ws.append(cols)
|
||||
for f in filas:
|
||||
ws.append([f.get(c, "") for c in cols])
|
||||
xlsx_path = "cartera_junta_export.xlsx"
|
||||
wb.save(xlsx_path)
|
||||
print(f"Excel generado: {xlsx_path}")
|
||||
except ImportError:
|
||||
print("(openpyxl no instalado -> solo CSV. Para Excel: pip install openpyxl)")
|
||||
Reference in New Issue
Block a user