ORM asíncrono para Python con interfaz similar a Prisma
Project description
GroovinDB
GroovinDB es un ORM (Object-Relational Mapping) minimalista y eficiente para Python que soporta múltiples bases de datos (PostgreSQL, MySQL y SQLite). Proporciona una interfaz limpia y tipada para interactuar con bases de datos relacionales.
Características
- Soporte para múltiples bases de datos simultáneas
- Manejo automático de múltiples schemas
- Soporte para PostgreSQL, MySQL y SQLite
- Queries raw específicas por tipo de base de datos
- Tipado estático con generación automática de tipos
- API intuitiva y fácil de usar
- CLI integrado para inicialización y generación de tipos
- Operaciones CRUD completas
- Validación de inputs
- Logging integrado con rotación de archivos
- Soporte para operaciones de agregación
- Manejo de transacciones
- Pool de conexiones configurable
Instalación
pip install groovindb
Configuración Rápida
- Inicializa un nuevo proyecto:
groovindb init
Este comando creará un archivo groovindb.json donde puedes configurar múltiples conexiones:
{
"default": "postgresql",
"connections": {
"postgresql": {
"driver": "postgresql",
"host": "localhost",
"port": 5432,
"database": "warehouse",
"user": "usuario",
"password": "contraseña"
},
"mysql": {
"driver": "mysql",
"host": "localhost",
"port": 3306,
"database": "app_db",
"user": "usuario",
"password": "contraseña"
}
}
}
- Genera los tipos de tus bases de datos:
groovindb introspect
Uso Básico
from groovindb import GroovinDB
async def main():
# Inicializar la conexión
db = GroovinDB()
# Consultas raw en PostgreSQL
pg_results = await db.client.postgresql.query(
"SELECT * FROM schema.table WHERE id = $1",
123
)
# Consultas raw en MySQL
mysql_results = await db.client.mysql.query(
"SELECT * FROM table WHERE active = %s",
True
)
# Consulta que retorna una sola fila
single_result = await db.client.postgresql.query_one(
"SELECT * FROM users WHERE id = $1",
123
)
# Ejecutar una query sin retorno
await db.client.mysql.execute(
"UPDATE users SET active = %s WHERE id = %s",
True, 123
)
await db.disconnect()
Manejo de Schemas
GroovinDB detecta y maneja automáticamente todos los schemas disponibles en tus bases de datos:
# Acceso a tablas en diferentes schemas
pg_result = await db.client.postgresql.query(
"SELECT * FROM public.users WHERE id = $1",
123
)
mysql_result = await db.client.mysql.query(
"SELECT * FROM app.products WHERE active = %s",
True
)
Tipos de Queries Raw
Cada driver de base de datos proporciona tres métodos principales:
# Consulta que retorna múltiples filas
results = await db.client.postgresql.query(
"SELECT * FROM users WHERE active = $1",
True
)
# Consulta que retorna una sola fila
user = await db.client.postgresql.query_one(
"SELECT * FROM users WHERE id = $1",
123
)
# Ejecutar una query sin retorno
await db.client.postgresql.execute(
"UPDATE users SET active = $1 WHERE id = $2",
True, 123
)
Placeholders por Driver
Cada driver utiliza su propio estilo de placeholders:
- PostgreSQL:
$1,$2, etc. - MySQL:
%s - SQLite:
?
Logging Mejorado
from groovindb.utils.logger import logger
# Configuración básica
logger.setLevel("DEBUG")
# Configuración avanzada con rotación de archivos
from groovindb.utils.logger import GroovinLogger
logger = GroovinLogger(
name="mi_app",
level="DEBUG",
log_file="app.log",
rotate=True,
max_bytes=10_000_000, # 10MB
backup_count=5
).logger
Configuración SSL
{
"connections": {
"postgresql": {
"ssl": true,
"ssl_ca": "/path/to/ca.crt",
"ssl_cert": "/path/to/client-cert.pem",
"ssl_key": "/path/to/client-key.pem"
}
}
}
Pool de Conexiones
{
"connections": {
"postgresql": {
"pool_min_size": 1,
"pool_max_size": 10,
"connect_timeout": 10,
"command_timeout": 30
}
}
}
Soporte de Drivers
- PostgreSQL (usando
asyncpg) - MySQL (usando
aiomysql) - SQLite (usando
aiosqlite)
Consideraciones de Rendimiento
- Pool de conexiones configurable por base de datos
- Conexiones manejadas automáticamente
- Queries validadas antes de ser ejecutadas
- Soporte para transacciones
- Timeouts configurables
- Rotación de logs para mejor rendimiento
Licencia
MIT License - ver archivo LICENSE para más detalles.
Project details
Release history Release notifications | RSS feed
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 groovindb-1.1.1.tar.gz.
File metadata
- Download URL: groovindb-1.1.1.tar.gz
- Upload date:
- Size: 24.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1cb2138792b0b015dcf1a6153520c4dc028d41493ee9ff6d26bf402b4b63f1b8
|
|
| MD5 |
21ef177a8cc5ffa61db074d5c272f036
|
|
| BLAKE2b-256 |
665f18affbfaf58ae329cb9e6465c2266ae4f6c3e62d9bb02ba6d02baef8f265
|
File details
Details for the file groovindb-1.1.1-py3-none-any.whl.
File metadata
- Download URL: groovindb-1.1.1-py3-none-any.whl
- Upload date:
- Size: 30.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
033df13bd242a965874634594c57d955fde02dcea925d8e097675d6fb9fb4234
|
|
| MD5 |
c28115af73fe6cbdbc7827d511622184
|
|
| BLAKE2b-256 |
a4004b1405157fd4d9a34964852d695ff878151acc738a0ebcf28836d2a32501
|