tai-sql¶
Framework declarativo de Python, sobre SQLAlchemy, que gestiona el ciclo de vida completo de una base de datos. Declaras el modelo una vez, en un fichero Python, y a partir de ahí tai-sql sincroniza la estructura de la base de datos, genera un cliente Python completo —modelos, DTOs y DAOs síncronos y asíncronos— y dibuja el diagrama entidad-relación.
schemas/public.py ──▶ tai-sql push ──▶ la base de datos se parece al schema
──▶ tai-sql generate ──▶ cliente Python + diagrama ER
──▶ tai-sql feed ──▶ datos iniciales
◀── tai-sql pull ◀── una base de datos que ya existe
Motores soportados: PostgreSQL, MySQL, SQL Server y BigQuery.
Empieza por aquí¶
-
Instalación
Qué instalar, y por qué son dos instalaciones y no una.
-
Tu primer proyecto
De cero a un cliente generado funcionando, paso a paso.
-
El schema
Cómo se declaran tablas, relaciones, vistas, triggers y todo lo demás.
-
tai-sql push
Cómo sincroniza, qué valida y —lo importante— qué puede destruir.
Los cinco principios que explican el resto¶
Si algo del framework te sorprende, la explicación casi siempre está en uno de estos cinco principios. Son invariantes: ninguna versión los rompe.
- El schema es la única fuente de verdad. Todo lo demás —DDL, cliente, diagramas— es derivado y desechable. Si el cliente generado no hace lo que necesitas, no se edita el cliente: se arregla el schema y se regenera.
- Mapear y después actuar. Todo comando importa el schema, lo analiza y actúa sobre ese mapeo. Ningún comando parsea el fichero por su cuenta, y por eso un error del schema aparece en cualquier comando.
- El código generado nunca importa
tai_sql. tai-sql es una herramienta de desarrollo, no una dependencia de producción: el cliente se despliega donde tai-sql no está instalado. - Modelo declarativo, sin migraciones versionadas. No hay ficheros de migración:
pushcompara el estado declarado con el real y genera el DDL que hace falta. - Definición ≠ runtime. El ORM de tai-sql describe; el comportamiento en producción vive en el código generado.
Un vistazo¶
# -*- coding: utf-8 -*-
from __future__ import annotations
from tai_sql import *
from tai_sql.generators import *
datasource(provider=env('MAIN_DATABASE_URL'), schema='public', syntax='v2')
generate(
PythonClientGenerator(output_dir='database'),
ERDiagramGenerator(output_dir='diagrams', format='html'),
)
class Usuario(Table):
"""Usuarios del sistema."""
__tablename__ = 'usuario'
id: col[int] = column(primary_key=True, autoincrement=True)
nombre: col[str]
email: col[str] = column(unique=True)
creado_en: col[datetime] = column(server_now=True)
posts: onetomany[Post]
class Post(Table):
"""Posts publicados."""
__tablename__ = 'post'
id: col[bigint] = column(primary_key=True, autoincrement=True)
titulo: col[str]
contenido: col[text]
autor_id: col[int]
autor: manytoone[Usuario] = relation(
fields=['autor_id'], references=['id'], backref='posts'
)
Cómo está organizado este manual¶
| Sección | Qué responde |
|---|---|
| Inicio | Qué instalar, cómo montar un proyecto y cómo es por dentro |
| El schema | Todo lo que se puede declarar, y cómo |
| El CLI | Qué hace cada comando, en qué orden se usan y qué puede destruir |
| El cliente generado | La API que vas a usar desde tu aplicación |
| Referencia | Firmas, motores soportados, extensión y catálogo de errores |
¿Trabajas con un asistente de IA?
tai-sql rules install deja en tu proyecto la documentación que un asistente necesita para
escribir schemas correctos, incluida una parte derivada de tu schema. Ver
tai-sql rules.