Skip to main content

chastack_bdd

Hecho por Chaska Versión: 0.8.5 Verisón de Python: 3.13 Licencia: MIT

chastack_bdd es una librería de Python que permite definir clases que, en tiempo de ejecución, se poblan automáticamente con los atributos definidos en las tablas SQL homónimas. Se utiliza un enfoque de metaprogramación para que, al declarar una clase con metaclass=Tabla, la clase resultante herede de Registro y adquiera todos los métodos y comportamientos necesarios para interactuar con la base de datos de manera transparente y segura.

La inicialización de las clases es "vaga": la estructura de la tabla se consulta y se refleja en la clase solo cuando se instancia por primera vez o cuando se invocan ciertos métodos de clase. Esto garantiza que los atributos (__slots__) estén sincronizados con la base de datos y que los campos no modificables (como id, fecha_carga, fecha_modificacion) estén protegidos contra escritura directa.

[!TIP]
Todas las clases creadas con metaclass=Tabla aceptan el parámetro especial debug, que permite obtener información de diagnóstico sobre la inicialización, instanciación y otros eventos internos, facilitando el manejo de errores y la depuración.

Se provee un protocolo de base de datos (ProtocoloBaseDeDatos) para que el usuario pueda implementar su propia abstracción de acceso a datos. Además, se incluye una implementación acoplada a MySQL lista para usar.


Documentación

Tema Enlace Descripción breve
📑 Referencia de la API Referencia de la API Métodos, clases y firmas públicas
🧑‍💻 Ejemplos de uso Ejemplos de uso Casos prácticos, básicos y avanzados
🏗️ Creación de modelos Creación de modelos Cómo definir y manipular modelos con metaclass=Tabla
👤 Gestión de usuarios Gestión de usuarios Modelos de usuario, autenticación y seguridad
🔌 Extensión a otros motores Extensión a otros motores de BDD Implementar soporte para otros motores de base de datos
🗃️ Requisitos de las tablas Requisitos de las tablas SQL Estructura mínima y convenciones de las tablas

¿Qué es chastack_bdd?

chastack_bdd permite definir clases Python que representan tablas SQL, poblando automáticamente sus atributos y métodos según la estructura de la base de datos. Utiliza metaprogramación avanzada para garantizar sincronización, protección de campos críticos y soporte para relaciones complejas.

Modelos automáticos: Las clases declaradas con metaclass=Tabla adquieren dinámicamente los atributos y métodos necesarios para operar sobre la tabla homónima.
Relaciones y consultas: Se provee soporte nativo para relaciones muchos a muchos, así como para consultas avanzadas y ordenamientos personalizados.
Gestión de usuarios: Se incluye una clase base Usuario que implementa los mecanismos necesarios para autenticación y gestión segura de credenciales.
Backend desacoplado: La interacción con la base de datos se realiza a través de un protocolo ProtocoloBaseDeDatos, permitiendo utilizar la implementación incluida para MySQL o desarrollar una propia.


Ejemplo mínimo

Primero se debe definir (y crear) la tabla para la cual se quiere producir el model (debe ajustarse al requisito mínimo de Registro).

CREATE TABLE Cliente (
    id INT PRIMARY KEY AUTO_INCREMENT,
    , fecha_carga DATETIME DEFAULT CURRENT_TIMESTAMP
    , fecha_modificacion DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    , email VARCHAR(100) NOT NULL
    , nombre VARCHAR(100) NOT NULL
);

Luego se debe crear la configuración y conexión para la base de datos, en el ejemplo usaremos MySQl, pero se puede utilizar cualquier abstracción que se ajuste al protocolo.

from chastack_bdd importConfigMySQL, BaseDeDatos_MySQL

config = ConfigMySQL(
    host="localhost",
    usuario="root_o_usuario",
    contrasena="contraseña_root_o_usuario",
    bdd="base_a_usar"
)

bdd = BaseDeDatos_MySQL(config)

Finalmente definimos la clase en Python, sin necesidad de declarar sus atributos.

from chastack_bdd import Tabla, Registro

class Cliente(metaclass=Tabla):
    pass

nuevo_cliente = Cliente(bdd, {"nombre": "Ana", "email": "ana@ejemplo.com"})
nuevo_cliente.guardar()

cliente_1 = Cliente(bdd, id=1)
print("Nombre:", cliente_1.nombre)
print("Email:", cliente_1.email)
print("Fecha de carga:", cliente_1.fecha_carga)

for columna, valor in cliente_1:
    print(f"{columna}: {valor}")

Para ejemplos avanzados, ver Ejemplos de uso.


Instalación

Aislada

pip install chastack_bdd

Como parte de chastack

pip install chastack

Licencia

MIT. Ver LICENSE.

Release files for chastack-bdd 0.8.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for chastack-bdd 0.8.5
File Size Uploaded
chastack_bdd-0.8.5.tar.gz 23.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for chastack-bdd 0.8.5
File Interpreter ABI Platform
chastack_bdd-0.8.5-py3-none-any.whl Python 3 none any Details

Total release size: 48.0 kB

Release files / chastack_bdd-0.8.5.tar.gz

Download URL chastack_bdd-0.8.5.tar.gz
Size 23.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ffafd4323c01597d7d5731715c361734be821ebf06f1c09ecd5adf904d5cd7a2
BLAKE2b-256 checksum
How to use checksums
497c1b3139b99e1a163a5a08c4500d4d912141a132ab1d515f936bbce8aaf52c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release files / chastack_bdd-0.8.5-py3-none-any.whl

Download URL chastack_bdd-0.8.5-py3-none-any.whl
Size 24.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3f2f080d7562d47c88b72cda20026c41e6bac7bedf0e588417219b243584e954
BLAKE2b-256 checksum
How to use checksums
5961dc28bd0d283b6fddd5dad48ee6562be18e67988d0feea176e47706da54bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.3

Release history Release notifications | RSS feed

This release

0.8.5 This release

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.12

2 release files

0.7.11

2 release files

0.7.10

2 release files

0.7.9

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page