
Research
/Security News
9 Malicious NuGet Packages Deliver Time-Delayed Destructive Payloads
Socket researchers discovered nine malicious NuGet packages that use time-delayed payloads to crash applications and corrupt industrial control systems.
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.
pip install groovindb
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"
}
}
}
groovindb introspect
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()
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
)
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
)
Cada driver utiliza su propio estilo de placeholders:
$1, $2, etc.%s?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
{
"connections": {
"postgresql": {
"ssl": true,
"ssl_ca": "/path/to/ca.crt",
"ssl_cert": "/path/to/client-cert.pem",
"ssl_key": "/path/to/client-key.pem"
}
}
}
{
"connections": {
"postgresql": {
"pool_min_size": 1,
"pool_max_size": 10,
"connect_timeout": 10,
"command_timeout": 30
}
}
}
asyncpg)aiomysql)aiosqlite)MIT License - ver archivo LICENSE para más detalles.
FAQs
ORM asíncrono para Python con interfaz similar a Prisma
We found that groovindb demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Socket researchers discovered nine malicious NuGet packages that use time-delayed payloads to crash applications and corrupt industrial control systems.

Security News
Socket CTO Ahmad Nassri discusses why supply chain attacks now target developer machines and what AI means for the future of enterprise security.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.