Skip to main content

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

  1. 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"
    }
  }
}
  1. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

groovindb-1.1.1.tar.gz (24.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

groovindb-1.1.1-py3-none-any.whl (30.4 kB view details)

Uploaded Python 3

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

Hashes for groovindb-1.1.1.tar.gz
Algorithm Hash digest
SHA256 1cb2138792b0b015dcf1a6153520c4dc028d41493ee9ff6d26bf402b4b63f1b8
MD5 21ef177a8cc5ffa61db074d5c272f036
BLAKE2b-256 665f18affbfaf58ae329cb9e6465c2266ae4f6c3e62d9bb02ba6d02baef8f265

See more details on using hashes here.

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

Hashes for groovindb-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 033df13bd242a965874634594c57d955fde02dcea925d8e097675d6fb9fb4234
MD5 c28115af73fe6cbdbc7827d511622184
BLAKE2b-256 a4004b1405157fd4d9a34964852d695ff878151acc738a0ebcf28836d2a32501

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page