Librería para sincronización estructural de bases de datos MariaDB con modelos Python
Project description
Documentación de la Librería mtpk_mariadb para Gestión de MariaDB
Esta librería es un wrapper avanzado para la gestión de bases de datos MariaDB utilizando pymysql. Está diseñada para facilitar la creación, sincronización y mantenimiento de estructuras de tablas en una base de datos.
Instalación
pip install mtpk_mariadb
1. Gestión de Tablas y Columnas
La librería permite definir tablas y columnas como objetos Python (Tabla, Columna, ForeignKey, Index) y generar automáticamente las sentencias SQL necesarias para crear o modificar estas estructuras.
Qué puedes hacer:
- Definir tablas y columnas: Usa las clases
TablayColumnapara modelar tus tablas con sus atributos (tipos, claves primarias, valores por defecto, etc.). - Generar SQL automáticamente: Convierte tus definiciones en sentencias SQL con métodos como
to_sql(). - Añadir relaciones: Define claves foráneas (
ForeignKey) y índices (Index) fácilmente.
2. Sincronización de Estructuras
La clase ManagerDB permite comparar las estructuras definidas en tu código con las existentes en la base de datos y aplicar los cambios necesarios.
Qué puedes hacer:
- Simular cambios: Usa
simular_cambios()para ver qué sentencias SQL se generarían para sincronizar la base de datos. - Aplicar cambios: Usa
aplicar_cambios()para ejecutar las sentencias generadas y sincronizar la base de datos. - Evitar errores manuales: La librería valida automáticamente duplicados y conflictos en columnas, índices y claves foráneas.
3. Registro de Migraciones
La librería incluye una tabla especial (_migraciones) para registrar los cambios estructurales aplicados, lo que facilita el seguimiento de las modificaciones realizadas.
Qué puedes hacer:
- Historial de cambios: Consulta la tabla
_migracionespara ver qué cambios se han aplicado y cuándo. - Evitar duplicados: La librería verifica que no se apliquen cambios ya registrados.
4. Comparación Avanzada
La librería permite comparar la estructura actual de la base de datos con una estructura registrada previamente en la tabla estructura_actual.
Qué puedes hacer:
- Verificar diferencias: Usa
verificar_contra_estructura_actual()para detectar cambios entre la estructura actual y la registrada. - Actualizar registros: Usa
guardar_estructura_actual()para mantener actualizada la tablaestructura_actualcon los modelos actuales.
5. Ejecución de Consultas
La clase Database incluye métodos para ejecutar consultas SQL de lectura (SELECT) y acción (INSERT, UPDATE, DELETE) de forma sencilla.
Qué puedes hacer:
- Ejecución simplificada: Usa
query()para ejecutar cualquier consulta SQL sin preocuparte por abrir o cerrar conexiones. - Transacciones: Controla transacciones manualmente con
commit()yrollback().
6. Casos de Uso
Esta librería es ideal para:
- Proyectos con cambios frecuentes en la base de datos: Sincroniza automáticamente las estructuras sin necesidad de escribir manualmente sentencias SQL.
- Gestión de bases de datos complejas: Define relaciones, índices y claves foráneas de forma declarativa.
- Migraciones controladas: Lleva un registro de los cambios aplicados para facilitar el mantenimiento y la auditoría.
Guía de Referencia de Clases y Métodos
Clases Principales
1. Columna
Representa una columna SQL para crear tablas en MariaDB.
Atributos:
nombre(str): Nombre de la columna.tipo(str): Tipo de dato según MariaDB.longitud(Optional[int]): Longitud para tipos como VARCHAR(n), CHAR(n), etc.precision(Optional[int]): Precisión para DECIMAL(p, s), FLOAT(p), etc.escala(Optional[int]): Escala para DECIMAL(p, s).not_null(bool): Si la columna debe ser NOT NULL.primary_key(bool): Si esta columna es clave primaria.unique(bool): Si esta columna tiene restricción UNIQUE.auto_increment(bool): Si es autoincremental.default(Optional[Union[str, int, float, Literal["CURRENT_TIMESTAMP"]]]): Valor por defecto.comentario(Optional[str]): Comentario SQL para la columna.enum_opciones(Optional[list[str]]): Lista de valores posibles si el tipo es ENUM o SET.
Métodos:
to_sql() -> str: Genera la definición SQL de esta columna.
2. ForeignKey
Representa una clave foránea (FOREIGN KEY) en una tabla SQL.
Atributos:
columna(str): Nombre de la columna local que actúa como clave foránea.referencia_tabla(str): Nombre de la tabla referenciada.referencia_columna(str): Columna de la tabla referenciada.nombre(Optional[str]): Nombre explícito del constraint.on_delete(Optional[str]): Acción al eliminar la fila referenciada.on_update(Optional[str]): Acción al actualizar la fila referenciada.
Métodos:
to_sql() -> str: Genera la definición SQL de la clave foránea.
3. Index
Representa un índice (normal o único) sobre una o más columnas de una tabla SQL.
Atributos:
columnas(List[str]): Lista de nombres de columnas incluidas en el índice.nombre(Optional[str]): Nombre personalizado del índice.unico(bool): Indica si el índice es único (UNIQUE).
Métodos:
to_sql() -> str: Genera la definición SQL del índice.
4. Tabla
Representa la definición estructural de una tabla SQL para MariaDB.
Atributos:
nombre(str): Nombre de la tabla.columnas(List[Columna]): Lista de columnas de la tabla.indices(List[Index]): Lista de índices adicionales.foreign_keys(List[ForeignKey]): Lista de claves foráneas.claves_primarias(List[str]): Lista de columnas que componen la clave primaria.comentario(Optional[str]): Comentario descriptivo opcional.engine(str): Motor de almacenamiento (por defecto"InnoDB").charset(str): Conjunto de caracteres (por defecto"utf8mb4").
Métodos:
add_columna(columna: Columna): Añade una columna a la tabla.set_columnas(columnas: List[Columna]): Reemplaza la lista completa de columnas.add_index(index: Index): Añade un índice a la tabla.set_indices(indices: List[Index]): Reemplaza la lista completa de índices.add_foreign_key(fk: ForeignKey): Añade una clave foránea a la tabla.set_foreign_keys(foreign_keys: List[ForeignKey]): Reemplaza la lista completa de claves foráneas.to_sql() -> str: Genera la sentencia SQLCREATE TABLE.comparar_generar_alter(...) -> List[str]: Compara la estructura actual con la base de datos y genera sentenciasALTER TABLE.
5. Database
Clase base para gestionar conexiones y operaciones con MariaDB.
Atributos:
host(str): Host de la base de datos.user(str): Usuario de la base de datos.password(str): Contraseña del usuario.db(str): Nombre de la base de datos.port(int): Puerto de conexión (por defecto3306).tablas(Dict[str, Tabla]): Diccionario de tablas registradas.
Métodos:
conectar(autocommit=False): Abre una conexión reutilizable.cerrar(): Cierra la conexión si está abierta.commit(): Confirma la transacción activa.rollback(): Revierte la transacción activa.add_tabla(tabla: Tabla): Añade una tabla al conjunto de la base de datos.get_tabla(nombre: str) -> Tabla: Devuelve una tabla registrada.query(sql: str, params=None, conexion=None): Ejecuta una consulta SQL (lectura o acción).
6. ManagerDB
Extensión de Database para sincronización avanzada de estructuras.
Métodos:
crear_tablas_si_no_existen() -> dict: Crea las tablas registradas si no existen.simular_cambios(permitir_drop=False) -> dict: Simula los cambios necesarios para sincronizar la base de datos.aplicar_cambios(permitir_drop=True) -> dict: Aplica los cambios estructurales en la base de datos.verificar_contra_estructura_actual() -> dict: Compara los modelos locales con la estructura registrada enestructura_actual.guardar_estructura_actual(conn): Guarda la estructura actual de los modelos en la tablaestructura_actual.
Ejemplo de Uso
from core_sync import Tabla, Columna, ManagerDB
# Definir una tabla
tabla_usuarios = Tabla(
nombre="usuarios",
columnas=[
Columna(nombre="id", tipo="INT", auto_increment=True, primary_key=True),
Columna(nombre="nombre", tipo="VARCHAR", longitud=100, not_null=True),
Columna(nombre="email", tipo="VARCHAR", longitud=150, unique=True),
],
comentario="Tabla de usuarios"
)
# Crear una base de datos y registrar la tabla
db = ManagerDB(host="localhost", user="root", password="1234", db="mi_base")
db.add_tabla(tabla_usuarios)
# Sincronizar la estructura
db.aplicar_cambios()
Notas Finales
- Esta librería es ideal para proyectos con cambios frecuentes en la base de datos.
- Permite automatizar la creación y sincronización de estructuras, evitando errores manuales.
- Integra funcionalidades avanzadas como migraciones y comparación de estructuras.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mtpk_mariadb-0.1.4.tar.gz.
File metadata
- Download URL: mtpk_mariadb-0.1.4.tar.gz
- Upload date:
- Size: 38.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bd9005f47475c9dd2b571daa1843461cc3ecb2cbf98d448b8ca7c1fcdd89e29
|
|
| MD5 |
4e2bf16a7d36bc22e5147dafd879cfa9
|
|
| BLAKE2b-256 |
a03132510d56d9bcda030023d01d62fec64e6989c1144a071384346b95255cdc
|
File details
Details for the file mtpk_mariadb-0.1.4-py3-none-any.whl.
File metadata
- Download URL: mtpk_mariadb-0.1.4-py3-none-any.whl
- Upload date:
- Size: 41.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
262ec504732c86f8d7be97844df4ee7300be9e57477d7f41c816145800d00aee
|
|
| MD5 |
7160fec759636604749d6a301a5274ee
|
|
| BLAKE2b-256 |
2e2cce9d188a91b5ae2fd68778457ebf78884453211c1a0ccc7dff28bd79037b
|