Referencia del DSL¶
Todo lo que exporta from tai_sql import *. Es la superficie de contrato con tus schemas: los
cambios son aditivos o pasan por una deprecación explícita.
Cabecera del schema¶
datasource(
provider, # env() | connection_string() | params()
schema='public',
syntax='v1', # 'v1' | 'v2' (las plantillas nuevas usan v2)
operative_fields=False,
secret_key_name='SECRET_KEY',
default_vector_dimensions=384,
# Del cliente generado (su hogar es PythonClientGenerator):
sqlalchemy_logs=False, pool_pre_ping=True, pool_recycle=3600,
pool_size=5, max_overflow=5, pool_timeout=30, ssl=True,
# Backup:
backup_storage=None, backup_format='custom', backup_retention=None,
restore_provider=None,
)
generate(*generadores)
query('fichero.sql') # lee views/<schema>/fichero.sql
Providers¶
env('MAIN_DATABASE_URL')
connection_string('postgresql://u:p@h:5432/db')
params(host, database, username, password, port=5432, driver='postgresql', query={})
Columnas¶
column(
primary_key=False,
unique=False,
default=None,
server_now=False,
index=False,
autoincrement=False,
encrypt=False,
description='',
self_reference=None,
)
vector_column(
dimensions=None,
source=None,
encoder=None,
metric='cosine', # 'cosine' | 'l2' | 'inner_product'
threshold=None,
index=False,
description='',
)
Relaciones y constraints¶
relation(fields, references, backref, onDelete='cascade', onUpdate='cascade')
unique_constraint(*columns)
index_constraint(*columns, unique=False, method=None)
Anotaciones¶
Clases base¶
Triggers¶
@on_create(timing='before', priority=1, when=None)
@on_update(timing='before', priority=1, fields=None, when=None)
@on_delete(timing='before', priority=1, when=None)
TriggerAPI[Modelo] # el type hint del parámetro t
Columnas calculadas¶
def nombre(self) -> col[T]: ... # v2, sin decorador
@calculated_column # v1, o si prefieres ser explícito
def nombre(self) -> T: ...
Encoders¶
SentenceTransformerEncoder(model='all-MiniLM-L6-v2', dimensions=None)
OpenAIEncoder(model='text-embedding-3-small', dimensions=None)
AzureOpenAIEncoder(model='text-embedding-3-small', dimensions=None,
azure_endpoint=None, api_version=None)
GoogleEncoder(model='gemini-embedding-2-preview', dimensions=None, location=None)
Tipos y extensión¶
get_type_registry()
register_type(descriptor)
TypeDescriptor # la ABC para un tipo propio
BaseEncoder # la ABC para un encoder propio
Re-exports de conveniencia¶
Existen porque los schemas usan from tai_sql import *:
Dunders reconocidos¶
| Dunder | Dónde | Para qué |
|---|---|---|
__tablename__ |
Table, View | Nombre físico. Obligatorio |
__description__ |
Table, View | Descripción, si no usas el docstring |
__examples__ |
Table, View | Ejemplos de fila |
__constraints__ |
Table | UNIQUE e índices de varias columnas |
__operative_fields__ |
Table | Fuerza las columnas de auditoría |
__query__ |
View | El SQL que la define |
__is_view__ |
View | Marcador interno |
Y en el cuerpo de una View: materialized = True y dependencies = [...].