# 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"
}