Update README.md
This commit is contained in:
parent
6e85483aed
commit
5319a31336
149
README.md
149
README.md
|
|
@ -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 )
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue