tai-sql generate¶
Ejecuta los generadores que declare el generate(...) del schema. No toca la base de datos y
no necesita conexión: solo necesita poder importar el schema, así que las variables de entorno
del env(...) tienen que existir, aunque no apunten a nada real.
Qué produce PythonClientGenerator¶
Escribe en <output_dir>/<schema>/:
<schema>/
├── __init__.py fachada: <schema>_sync_api, <schema>_async_api, DTOs, modelos
├── _base.py declarative base, cifrado si aplica
├── _session.py gestión de sesiones y pool
├── _shared/ utilidades comunes: agregaciones, RLS, contexto de usuario
└── <tabla>/
├── model.py modelo SQLAlchemy
├── dtos.py DTOs Pydantic: Read, Create, Filter, Update…
├── dao_sync.py operaciones síncronas
└── dao_async.py operaciones asíncronas
Todo ese directorio es desechable
Se borra y se regenera. Editarlo a mano no tiene sentido: la siguiente generación lo pisa. Si el cliente no hace lo que necesitas, el cambio va en el schema.
Ver El cliente generado.
Qué produce ERDiagramGenerator¶
Escribe <output_dir>/<schema>.<format> y dibuja tablas, vistas, columnas con sus marcadores,
enumerados con sus valores y qué columna los usa, las UNIQUE e índices de varias columnas, las
jerarquías y las relaciones con su cardinalidad. Cada bloque se apaga con su include_*.
Una página interactiva: un único fichero que se abre con doble clic, con buscador de tablas y columnas, panel de detalle con triggers y restricciones, filtros en vivo y tablas que se arrastran.
No necesita Graphviz ni conexión: la librería del diagrama viaja incrustada (~370 KB). Con
assets='cdn' se enlaza en su lugar y el fichero queda en unas decenas de KB, pero entonces
necesita internet para abrirse.
svg, png, pdf, dot, eps, ps, con Graphviz. Necesita el extra diagrams y el
binario dot instalado en el sistema.
Ahí sí aplican lines ('ortho', 'polyline', 'spline', 'curved'), size y dpi.
Los dos formatos se pueden declarar a la vez, cada uno con su output_dir:
generate(
ERDiagramGenerator(output_dir='diagrams', format='html'),
ERDiagramGenerator(output_dir='docs/img', format='svg'),
)
Varios destinos¶
output_dir acepta una lista, y el generador escribe lo mismo en todos:
Determinismo¶
Dos ejecuciones del mismo schema producen exactamente el mismo output, byte a byte. Eso es
lo que permite versionar el cliente generado sin que cada generate ensucie el diff.
Generadores propios¶
generate() acepta cualquier subclase de BaseGenerator, también la tuya. Ver
extender tai-sql.