Definiciones de tabla y tipos
Model, Schema y el compilador comparten una representación de tabla independiente del motor: TableDefinition. Las clases Integer, String y demás son ColumnDefinition; las restricciones estructuradas completan el esquema físico. Esta referencia cubre los metadatos públicos. El catálogo de tipos contiene los 39 tipos lógicos, sus 40 factorías, constructores, argumentos y ejemplos; los modificadores explican cada operación fluida.
Compartir un esquema y un modelo
Sección titulada «Compartir un esquema y un modelo»from orionis.database.schema.column import Columnfrom orionis.orm import Modelfrom orionis.orm.schema import TableDefinitionfrom orionis.orm.schema.constraints import TableIndex, UniqueConstraint
class ProjectsV1Schema: table_definition = TableDefinition( name="projects", columns={ "id": Column.id(), "name": Column.string("name", 120), "slug": Column.string("slug", 160), }, primary_key="id", unique_constraints=(UniqueConstraint(("slug",), name="uq_project_slug"),), indexes=(TableIndex(("name",), name="ix_project_name"),), )
class Project(Model): table_definition = ProjectsV1Schema.table_definition timestamps = False fillable = ("name", "slug")La definición no ejecuta DDL. Una migración debe llamar await Schema.createFromDefinition(ProjectsV1Schema.table_definition); la clase Project puede utilizarse después de crear su tabla. Para una historia reproducible conserva V1 y crea una nueva definición para cambios futuros. El ciclo de los modelos explica cómo se integran columnas declaradas en la clase y metadatos explícitos.
TableDefinition
Sección titulada «TableDefinition»Dataclass frozen=True, slots=True, eq=False. Sus campos se pasan por posición o nombre en este orden. Frozen impide reasignar un campo, pero no congela profundamente el diccionario columns ni cada ColumnDefinition: no modifiques una versión usada por migraciones históricas.
name: strNombre lógico sin prefijo de conexión. Obligatorio.
columns
Sección titulada «columns»columns: dict[str, ColumnDefinition] = field(default_factory=dict)Diccionario nombre → ColumnDefinition, inicialmente nuevo y vacío. El orden define el orden de columnas. La clave del diccionario es el nombre SQL que usa el compilador.
primary_key
Sección titulada «primary_key»primary_key: str = 'id'Nombre de la clave simple, default id. No crea una columna ausente ni marca por sí solo una definición arbitraria como primaria: declara primary() en la columna, o utiliza composite_primary_key para la restricción compuesta.
schema: str | None = NoneEsquema SQL propietario; None usa el predeterminado. No crea ese esquema automáticamente.
comment
Sección titulada «comment»comment: str | None = NoneComentario de tabla o None; almacenamiento dependiente del motor.
composite_primary_key
Sección titulada «composite_primary_key»composite_primary_key: tuple[str, ...] | None = NoneTupla ordenada o None; se convierte en PrimaryKeyConstraint. Tiene prioridad sobre la representación de clave simple para el esquema. No convierte Model.primary_key en una tupla soportada.
unique_constraints
Sección titulada «unique_constraints»unique_constraints: tuple[UniqueConstraint, ...] = ()Tupla de UniqueConstraint, default (). Permite restricciones simples o compuestas con nombre opcional.
foreign_keys
Sección titulada «foreign_keys»foreign_keys: tuple[CompositeForeignKey, ...] = ()Tupla de CompositeForeignKey, default (). Alinea columnas locales y referenciadas por posición.
indexes
Sección titulada «indexes»indexes: tuple[TableIndex, ...] = ()Tupla de TableIndex, default (). Conserva orden, nombre y unique de cada índice.
columnNames
Sección titulada «columnNames»columnNames() -> tuple[str, ...]columnNames devuelve una tupla de nombres en orden; hasColumn consulta pertenencia por nombre y devuelve bool. Ambas leen metadatos y no inspeccionan la base de datos.
hasColumn
Sección titulada «hasColumn»hasColumn(name: str) -> boolcolumnNames devuelve una tupla de nombres en orden; hasColumn consulta pertenencia por nombre y devuelve bool. Ambas leen metadatos y no inspeccionan la base de datos.
definition = ProjectsV1Schema.table_definitionnames = definition.columnNames()contains_slug = definition.hasColumn("slug")Restricciones estructuradas
Sección titulada «Restricciones estructuradas»Son dataclasses frozen/slots sin acceso SQL. Los argumentos obligatorios no tienen default; los defaults opcionales se indican en sus firmas. No hay validación anticipada completa de longitudes, columnas ni compatibilidad del servidor. Utiliza tuplas no vacías, columnas existentes y el mismo número de columnas locales/referenciadas.
UniqueConstraint
Sección titulada «UniqueConstraint»UniqueConstraint(columns: tuple[str, ...], name: str | None = None)columns identifica columnas únicas conjuntamente; name deja el nombre al motor si es None.
TableIndex
Sección titulada «TableIndex»TableIndex(columns: tuple[str, ...], name: str | None = None, unique: bool = False)columns conserva orden; name=None produce ix_<tabla_lógica>_<columnas>; unique solicita unicidad.
CompositeForeignKey
Sección titulada «CompositeForeignKey»CompositeForeignKey(columns: tuple[str, ...], ref_table: str, ref_columns: tuple[str, ...], name: str | None = None)ref_table admite schema.table. columns y ref_columns se alinean por posición. No hay parámetros ondelete, onupdate ni deferrable.
ForeignReference
Sección titulada «ForeignReference»ForeignReference(table: str, column: str)Contiene referencia individual. El constructor almacena valores; parse valida el formato table.column.
ForeignReference.parse(reference: str) -> ForeignReferenceForeignReference.qualified() -> strfrom orionis.orm.schema.constraints import ForeignReference
reference = ForeignReference.parse("users.id")assert reference.table == "users"assert reference.column == "id"assert reference.qualified() == "users.id"parse es classmethod, exige dos segmentos no vacíos y produce ValueError para schema.table.column, strings incompletos o valores no string. qualified es de instancia y devuelve table.column. Para referencias con esquema usa CompositeForeignKey.
Ejemplo de clave compuesta
Sección titulada «Ejemplo de clave compuesta»La tabla articles debe existir con UNIQUE o PRIMARY KEY compatible sobre (tenant_id, id). En SQLite configura claves externas para imponerlas.
from orionis.database.schema.column import Columnfrom orionis.orm.schema import TableDefinitionfrom orionis.orm.schema.constraints import CompositeForeignKey
TRANSLATIONS_V1 = TableDefinition( name="article_translations", columns={ "tenant_id": Column.integer("tenant_id"), "article_id": Column.integer("article_id"), "locale": Column.string("locale", 10), "title": Column.string("title", 120), }, composite_primary_key=("tenant_id", "article_id", "locale"), foreign_keys=( CompositeForeignKey( columns=("tenant_id", "article_id"), ref_table="articles", ref_columns=("tenant_id", "id"), name="fk_translation_article", ), ),)ColumnOptions
Sección titulada «ColumnOptions»Dataclass frozen=True/slots=True. Su constructor acepta todos estos campos, por posición o nombre, con los defaults mostrados. ColumnDefinition copia cada opción a atributos propios; utiliza preferentemente los constructores concretos del catálogo.
length: int | None = NoneLongitud de texto/binario.
precision
Sección titulada «precision»precision: int | None = NonePrecisión numérica.
scale: int | None = NoneEscala decimal.
decimal_return_scale
Sección titulada «decimal_return_scale»decimal_return_scale: int | None = NoneEscala de conversión a Decimal.
as_decimal
Sección titulada «as_decimal»as_decimal: bool = TrueConversión a Decimal; los constructores públicos lo llaman asdecimal. Float/Double lo cambian a False.
enum_values
Sección titulada «enum_values»enum_values: tuple[str, ...] = ()Miembros string de Enum.
enum_name
Sección titulada «enum_name»enum_name: str | None = NoneNombre del tipo Enum; los constructores lo llaman name.
native_enum
Sección titulada «native_enum»native_enum: bool = TrueSolicitar ENUM nativo.
validate_strings
Sección titulada «validate_strings»validate_strings: bool = FalseValidación de strings del tipo Enum.
create_constraint
Sección titulada «create_constraint»create_constraint: bool = FalseCHECK para booleanos/enum emulados.
constraint_name
Sección titulada «constraint_name»constraint_name: str | None = NoneNombre del CHECK de booleano.
timezone
Sección titulada «timezone»timezone: bool = FalseSoporte de zona de fecha/hora cuando exista.
collation
Sección titulada «collation»collation: str | None = NoneIntercalación de texto.
as_uuid
Sección titulada «as_uuid»as_uuid: bool = TrueConversión a objetos uuid.UUID.
native_uuid
Sección titulada «native_uuid»native_uuid: bool = TrueRepresentación UUID nativa donde exista.
item_type
Sección titulada «item_type»item_type: ColumnDefinition | None = NoneTipo de elementos ARRAY; conservado pero sin builder SQL.
dimensions
Sección titulada «dimensions»dimensions: int | None = NoneDimensiones ARRAY; conservadas pero no materializables.
as_tuple
Sección titulada «as_tuple»as_tuple: bool = FalseResultados ARRAY como tuple; conservado sin soporte SQL.
zero_indexes
Sección titulada «zero_indexes»zero_indexes: bool = FalseConversión de índices ARRAY; conservada sin soporte SQL.
none_as_null
Sección titulada «none_as_null»none_as_null: bool = FalseNone de JSON como SQL NULL en lugar de JSON null.
native: bool = TrueINTERVAL nativo donde exista.
second_precision
Sección titulada «second_precision»second_precision: int | None = NonePrecisión de segundos de INTERVAL.
day_precision
Sección titulada «day_precision»day_precision: int | None = NonePrecisión de días de INTERVAL.
protocol
Sección titulada «protocol»protocol: int = 5Protocolo de pickle; el default literal es 5.
pickler
Sección titulada «pickler»pickler: object | None = NonePickler personalizado conservado; SQLCompiler no lo reenvía.
comparator
Sección titulada «comparator»comparator: Callable[[object, object], bool] | None = NoneComparador conservado; SQLCompiler no lo utiliza. Ningún constructor concreto de tipo lo expone.
impl: object | None = NoneImplementación binaria personalizada conservada; SQLCompiler no la reenvía.
from orionis.orm.schema.column import ColumnDefinition, ColumnOptionsfrom orionis.orm import ColumnType
column = ColumnDefinition( ColumnType.STRING, ColumnOptions(length=120),).nullable()column.name = "title"Estado público adicional de ColumnDefinition
Sección titulada «Estado público adicional de ColumnDefinition»Además de las opciones anteriores, están disponibles name (string inicialmente vacío), column_type (ColumnType obligatorio), is_primary/is_nullable/is_unique/has_index/is_auto_increment (False), comment_text (None), foreign_ref (None o ForeignReference) y default_value (sentinela privado de ausencia). Consulta hasDefault en lugar de comparar la sentinela. Los métodos fluidos son la forma de configurar esas propiedades. No se ofrece conversión, validación de datos de negocio ni acceso al motor desde estos metadatos.
ColumnType
Sección titulada «ColumnType»StrEnum con 39 identificadores. Sus valores son metadatos lógicos, no una promesa de tipo nativo disponible. La traducción de ARRAY, MATCH_TYPE, NUMERIC_COMMON y SCHEMA_TYPE no está registrada; crear tablas con ellos produce QueryException.
| Miembro | Valor |
|---|---|
BIG_INTEGER | big_integer |
BOOLEAN | boolean |
DATE | date |
DATETIME | datetime |
DOUBLE | double |
ENUM | enum |
FLOAT | float |
INTEGER | integer |
INTERVAL | interval |
LARGE_BINARY | large_binary |
MATCH_TYPE | match_type |
NUMERIC | numeric |
NUMERIC_COMMON | numeric_common |
PICKLE_TYPE | pickle_type |
SCHEMA_TYPE | schema_type |
SMALL_INTEGER | small_integer |
STRING | string |
TEXT | text |
TIME | time |
UNICODE | unicode |
UNICODE_TEXT | unicode_text |
UUID | uuid |
ARRAY | array |
BIGINT | bigint |
BINARY | binary |
BLOB | blob |
CHAR | char |
CLOB | clob |
DECIMAL | decimal |
DOUBLE_PRECISION | double_precision |
INT | int |
JSON | json |
NCHAR | nchar |
NVARCHAR | nvarchar |
REAL | real |
SMALLINT | smallint |
TIMESTAMP | timestamp |
VARBINARY | varbinary |
VARCHAR | varchar |
Objetos internos expuestos por módulo
Sección titulada «Objetos internos expuestos por módulo»DefinitionBucket() es un acumulador de implementación, no una forma alternativa de crear tablas. Sus contenedores públicos columns={}, primary_columns=[], unique_constraints=[], foreign_keys=[], indexes=[] y kwargs={} agrupan definiciones mientras Schema procesa el blueprint. Schema._createTable tiene prefijo reservado y no forma parte de la fachada pública. Para crear tablas utiliza las cinco operaciones documentadas en Schema.