Update README.md

This commit is contained in:
fenix 2026-02-20 11:32:26 +00:00
parent 6e85483aed
commit 5319a31336
1 changed files with 144 additions and 5 deletions

149
README.md
View File

@ -1,6 +1,145 @@
# programar-un-simple-y-minimalista-CRUD-de-acceso-a-datos-con-Python
# PROGRAMAR un simple y minimalista CRUD de acceso a datos con Python
## TAREAS :
- [X] traducidos los ficheros Java a Python scripts con funcionalidad equivalente (acceso a SQLite por un lado y a MongoDB por el otro )
- [ ] Testear / debug ?
- [ ] incorporar el uso de la librería Python 'Faker' (ver a continuación) para poblar las bases de datos con datos 'falsos' para test.
## Recetas y pócimas Python
- [Uso de entornos virtuales mágicos](https://pythonisas.github.io/Pythonisas/entornos-virtuales-en-python.html)
- [Para tus bases de datos ...¿Generar datos de prueba aleatoriamente?](https://pythonisas.github.io/Pythonisas)
## Recursos
### En particular sobre la cuestión python + SQLite / mongoDB :
- [programando bases de datos SQLite, artículo del "El Libro de Python"](https://ellibrodepython.com/bases-datos-sqlite-python)
### En general sobre la cuestión :
- [Documentación Oficial en ES](https://docs.python.org/es/3/)
- ["Inventa tus propios juegos de computadora con Python"](https://inventwithpython.com/es/)
## Diagrama de flujo de los scripts Python :
La Base de Datos en ambos casos será unas simples tablas de 'alumnos' y 'profesores' siguiendo el patrón de lo programado en los ficheros Java de ejemplo (disponibles en este Proyecto)
```
╔═══════════════════════════════════╗
║ CRUD Minimalista con Python 🐍 ║
╚═══════════════╤═══════════════════╝
┌───────────┴───────────┐
│ TABLAS / Colecciones │
│ ┌─────────┐ ┌──────┐ │
│ │alumnos │ │profes │ │
│ └─────────┘ └──────┘ │
└───────────┬───────────┘
┌────────┴────────┐
│ C reate + R ead │
└────────┬────────┘
┌───────────────┴───────────────┐
│ │
┌───────┴────────┐ ┌────────┴───────┐
│ EJEMPLO A) │ │ EJEMPLO B) │
│ │ │ │
│ ┌──────────┐ │ │ ┌──────────┐ │
│ │ SQLite │ │ │ │ MongoDB │ │
│ │ .db │ │ │ │ { } │ │
│ └─────┬────┘ │ │ └─────┬────┘ │
│ │ │ │ │ │
│ ◄──►│ │ │ ◄──►│ │
│ │ │ │ │ │
│ ┌─────┴────┐ │ │ ┌─────┴────┐ │
│ │ Python │ │ │ │ Python │ │
│ │ sqlite3 │ │ │ │ pymongo │ │
│ └──────────┘ │ │ └──────────┘ │
└────────────────┘ └────────────────┘
SQL NoSQL
(Relacional) (Documentos)
```
## 📁 Estructura del Proyecto
```
programar-un-simple-y-minimalista-CRUD-de-acceso-a-datos-con-Python\
├── README.md ← este fichero
├── acceso-a-sqlite-via-java.jar ← ejemplo Java original (SQLite)
├── acceso-a-MongoDB-via-java.jar ← ejemplo Java original (MongoDB)
├── crud_sqlite.py ✅ Ejemplo A — funcional
├── crud_mongodb.py ✅ Ejemplo B — funcional (*)
└── dam.db ← BD SQLite generada automáticamente
```
> (*) `crud_mongodb.py` requiere una cadena de conexión a un servidor MongoDB válido (Atlas o local)
---
## EJEMPLO A): SQLite `<->` Python
📄 **Fichero:** `crud_sqlite.py`
🔧 **Dependencias:** ninguna (sqlite3 viene con Python)
```bash
python3 crud_sqlite.py
```
### ✅ Equivalencia Java → Python
| **Concepto Java** | **Equivalente Python** |
|:---------------------------------------|:------------------------------------------------|
| `DriverManager.getConnection(url)` | `sqlite3.connect(db_name)` |
| `Statement` / `PreparedStatement` | `cursor.execute()` con `?` placeholders |
| `ResultSet` + `rs.next()` | `cursor.fetchall()` + iteración |
| `pstmt.setString()` / `pstmt.setInt()` | tupla directa `(valor1, valor2)` |
| `try-with-resources` | `try/finally` + `conn.close()` |
| INSERT uno a uno con `executeUpdate()` | `executemany()` — inserta todos de una vez |
### 💡 Notas
- Python **no necesita driver externo** para SQLite (módulo `sqlite3` incluido en la stdlib)
- `executemany()` es más pythónico que insertar fila a fila como en Java
- La BD `dam.db` se recrea desde cero en cada ejecución
---
## EJEMPLO B): MongoDB `<->` Python
📄 **Fichero:** `crud_mongodb.py`
🔧 **Dependencias:** `pip install pymongo[srv]`
```bash
python3 crud_mongodb.py
```
### ✅ Equivalencia Java → Python
| **Concepto Java** | **Equivalente Python** |
|:-----------------------------------------------|:----------------------------------------|
| `MongoClients.create(configuracion)` | `MongoClient(CADENA_CONEXION)` |
| `baseDatos.runCommand(new Document("ping",1))` | `cliente.admin.command("ping")` |
| `clienteMongo.listDatabaseNames()` | `cliente.list_database_names()` |
| `baseDatos.listCollectionNames()` | `db.list_collection_names()` |
| `coleccion.find()` + bucle de claves | `coleccion.find()` + `doc.items()` |
| *(no existía en el Java)* | `$lookup` + `$unwind` (equivale a JOIN) |
### 💡 Notas
- La cadena de conexión del Java original (`clusterdam2025.9q7lm`) ya no está activa
- Para probar, cambiar `CADENA_CONEXION` por una conexión válida:
- **Atlas:** `mongodb+srv://user:pass@cluster.xxxxx.mongodb.net/`
- **Local:** `mongodb://localhost:27017`
- Se añadió un **`$lookup`** (equivalente a JOIN) que no existía en el Java, para mostrar alumnos con sus profesores — igual que en el ejemplo SQLite
- Las colecciones se recrean en cada ejecución (`drop()` + `insert_many()`)
Programando un simple y minimalista CRUD de acceso a datos con Python.
Partiendo la traducción de ficheros Java a Python scripts con funcionalidad equivalente (acceso a SQLite por un lado y a MongoDB por el otro )