groovindb


Namegroovindb JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://bitbucket.org/groovinads/groovindb
SummaryORM asíncrono para Python con interfaz similar a Prisma
upload_time2025-01-06 17:37:24
maintainerNone
docs_urlNone
authorJuan Manuel Panozzo Zenere
requires_python>=3.8
licenseMIT
keywords database orm async postgresql mysql prisma
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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

```bash
pip install groovindb
```

## Configuración Rápida

1. Inicializa un nuevo proyecto:

```bash
groovindb init
```

Este comando creará un archivo `groovindb.json` donde puedes configurar múltiples conexiones:

```json
{
  "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"
    }
  }
}
```

2. Genera los tipos de tus bases de datos:

```bash
groovindb introspect
```

## Uso Básico

```python
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:

```python
# 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:

```python
# 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

```python
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

```json
{
  "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

```json
{
  "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](LICENSE) para más detalles.

            

Raw data

            {
    "_id": null,
    "home_page": "https://bitbucket.org/groovinads/groovindb",
    "name": "groovindb",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "database, orm, async, postgresql, mysql, prisma",
    "author": "Juan Manuel Panozzo Zenere",
    "author_email": "Juan Manuel Panozzo Zenere <jmpanozzoz@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/38/a8/08a39a60379b6ba6de55bb6c08e11ca9f68fc0b1b1396ce0ca3ca606bcd1/groovindb-1.0.0.tar.gz",
    "platform": null,
    "description": "# GroovinDB\n\nGroovinDB es un ORM (Object-Relational Mapping) minimalista y eficiente para Python que soporta m\u00faltiples bases de datos (PostgreSQL, MySQL y SQLite). Proporciona una interfaz limpia y tipada para interactuar con bases de datos relacionales.\n\n## Caracter\u00edsticas\n\n- Soporte para m\u00faltiples bases de datos simult\u00e1neas\n- Manejo autom\u00e1tico de m\u00faltiples schemas\n- Soporte para PostgreSQL, MySQL y SQLite\n- Queries raw espec\u00edficas por tipo de base de datos\n- Tipado est\u00e1tico con generaci\u00f3n autom\u00e1tica de tipos\n- API intuitiva y f\u00e1cil de usar\n- CLI integrado para inicializaci\u00f3n y generaci\u00f3n de tipos\n- Operaciones CRUD completas\n- Validaci\u00f3n de inputs\n- Logging integrado con rotaci\u00f3n de archivos\n- Soporte para operaciones de agregaci\u00f3n\n- Manejo de transacciones\n- Pool de conexiones configurable\n\n## Instalaci\u00f3n\n\n```bash\npip install groovindb\n```\n\n## Configuraci\u00f3n R\u00e1pida\n\n1. Inicializa un nuevo proyecto:\n\n```bash\ngroovindb init\n```\n\nEste comando crear\u00e1 un archivo `groovindb.json` donde puedes configurar m\u00faltiples conexiones:\n\n```json\n{\n  \"default\": \"postgresql\",\n  \"connections\": {\n    \"postgresql\": {\n      \"driver\": \"postgresql\",\n      \"host\": \"localhost\",\n      \"port\": 5432,\n      \"database\": \"warehouse\",\n      \"user\": \"usuario\",\n      \"password\": \"contrase\u00f1a\"\n    },\n    \"mysql\": {\n      \"driver\": \"mysql\",\n      \"host\": \"localhost\",\n      \"port\": 3306,\n      \"database\": \"app_db\",\n      \"user\": \"usuario\",\n      \"password\": \"contrase\u00f1a\"\n    }\n  }\n}\n```\n\n2. Genera los tipos de tus bases de datos:\n\n```bash\ngroovindb introspect\n```\n\n## Uso B\u00e1sico\n\n```python\nfrom groovindb import GroovinDB\n\nasync def main():\n    # Inicializar la conexi\u00f3n\n    db = GroovinDB()\n    \n    # Consultas raw en PostgreSQL\n    pg_results = await db.client.postgresql.query(\n        \"SELECT * FROM schema.table WHERE id = $1\",\n        123\n    )\n    \n    # Consultas raw en MySQL\n    mysql_results = await db.client.mysql.query(\n        \"SELECT * FROM table WHERE active = %s\",\n        True\n    )\n    \n    # Consulta que retorna una sola fila\n    single_result = await db.client.postgresql.query_one(\n        \"SELECT * FROM users WHERE id = $1\",\n        123\n    )\n    \n    # Ejecutar una query sin retorno\n    await db.client.mysql.execute(\n        \"UPDATE users SET active = %s WHERE id = %s\",\n        True, 123\n    )\n    \n    await db.disconnect()\n```\n\n## Manejo de Schemas\n\nGroovinDB detecta y maneja autom\u00e1ticamente todos los schemas disponibles en tus bases de datos:\n\n```python\n# Acceso a tablas en diferentes schemas\npg_result = await db.client.postgresql.query(\n    \"SELECT * FROM public.users WHERE id = $1\",\n    123\n)\n\nmysql_result = await db.client.mysql.query(\n    \"SELECT * FROM app.products WHERE active = %s\",\n    True\n)\n```\n\n## Tipos de Queries Raw\n\nCada driver de base de datos proporciona tres m\u00e9todos principales:\n\n```python\n# Consulta que retorna m\u00faltiples filas\nresults = await db.client.postgresql.query(\n    \"SELECT * FROM users WHERE active = $1\",\n    True\n)\n\n# Consulta que retorna una sola fila\nuser = await db.client.postgresql.query_one(\n    \"SELECT * FROM users WHERE id = $1\",\n    123\n)\n\n# Ejecutar una query sin retorno\nawait db.client.postgresql.execute(\n    \"UPDATE users SET active = $1 WHERE id = $2\",\n    True, 123\n)\n```\n\n## Placeholders por Driver\n\nCada driver utiliza su propio estilo de placeholders:\n\n- PostgreSQL: `$1`, `$2`, etc.\n- MySQL: `%s`\n- SQLite: `?`\n\n## Logging Mejorado\n\n```python\nfrom groovindb.utils.logger import logger\n\n# Configuraci\u00f3n b\u00e1sica\nlogger.setLevel(\"DEBUG\")\n\n# Configuraci\u00f3n avanzada con rotaci\u00f3n de archivos\nfrom groovindb.utils.logger import GroovinLogger\n\nlogger = GroovinLogger(\n    name=\"mi_app\",\n    level=\"DEBUG\",\n    log_file=\"app.log\",\n    rotate=True,\n    max_bytes=10_000_000,  # 10MB\n    backup_count=5\n).logger\n```\n\n## Configuraci\u00f3n SSL\n\n```json\n{\n  \"connections\": {\n    \"postgresql\": {\n      \"ssl\": true,\n      \"ssl_ca\": \"/path/to/ca.crt\",\n      \"ssl_cert\": \"/path/to/client-cert.pem\",\n      \"ssl_key\": \"/path/to/client-key.pem\"\n    }\n  }\n}\n```\n\n## Pool de Conexiones\n\n```json\n{\n  \"connections\": {\n    \"postgresql\": {\n      \"pool_min_size\": 1,\n      \"pool_max_size\": 10,\n      \"connect_timeout\": 10,\n      \"command_timeout\": 30\n    }\n  }\n}\n```\n\n## Soporte de Drivers\n\n- PostgreSQL (usando `asyncpg`)\n- MySQL (usando `aiomysql`)\n- SQLite (usando `aiosqlite`)\n\n## Consideraciones de Rendimiento\n\n- Pool de conexiones configurable por base de datos\n- Conexiones manejadas autom\u00e1ticamente\n- Queries validadas antes de ser ejecutadas\n- Soporte para transacciones\n- Timeouts configurables\n- Rotaci\u00f3n de logs para mejor rendimiento\n\n## Licencia\n\nMIT License - ver archivo [LICENSE](LICENSE) para m\u00e1s detalles.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "ORM as\u00edncrono para Python con interfaz similar a Prisma",
    "version": "1.0.0",
    "project_urls": {
        "Bug Tracker": "https://bitbucket.org/groovinads/groovindb/issues",
        "Documentation": "https://bitbucket.org/groovinads/groovindb/src/master/README.md",
        "Homepage": "https://bitbucket.org/groovinads/groovindb",
        "Source Code": "https://bitbucket.org/groovinads/groovindb"
    },
    "split_keywords": [
        "database",
        " orm",
        " async",
        " postgresql",
        " mysql",
        " prisma"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4ce8ab3e032ff493bc78866c8daf8e65d3fc0822f5f46f6cb212819db31f9f61",
                "md5": "9d921e1890b726470cc5622e07c4e074",
                "sha256": "2975d22edde8969826878aa693b3cefa92a90139ff17aafc4e252afeafa5ca4a"
            },
            "downloads": -1,
            "filename": "groovindb-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9d921e1890b726470cc5622e07c4e074",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 30271,
            "upload_time": "2025-01-06T17:37:21",
            "upload_time_iso_8601": "2025-01-06T17:37:21.588248Z",
            "url": "https://files.pythonhosted.org/packages/4c/e8/ab3e032ff493bc78866c8daf8e65d3fc0822f5f46f6cb212819db31f9f61/groovindb-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "38a808a39a60379b6ba6de55bb6c08e11ca9f68fc0b1b1396ce0ca3ca606bcd1",
                "md5": "10c57fd6fe23f812b591816a15364150",
                "sha256": "6aeacad347580456a0e5f813378185b3bb0e03f225657ac423528d6e887c94c3"
            },
            "downloads": -1,
            "filename": "groovindb-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "10c57fd6fe23f812b591816a15364150",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 24234,
            "upload_time": "2025-01-06T17:37:24",
            "upload_time_iso_8601": "2025-01-06T17:37:24.047721Z",
            "url": "https://files.pythonhosted.org/packages/38/a8/08a39a60379b6ba6de55bb6c08e11ca9f68fc0b1b1396ce0ca3ca606bcd1/groovindb-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-06 17:37:24",
    "github": false,
    "gitlab": false,
    "bitbucket": true,
    "codeberg": false,
    "bitbucket_user": "groovinads",
    "bitbucket_project": "groovindb",
    "lcname": "groovindb"
}
        
Elapsed time: 0.41796s