7.2 KiB
7.2 KiB
PROGRAMAR un simple y minimalista CRUD de acceso a datos con Python
TAREAS :
-
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
- Para tus bases de datos ...¿Generar datos de prueba aleatoriamente?
Recursos
En particular sobre la cuestión python + SQLite / mongoDB :
En general sobre la cuestión :
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.pyrequiere 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)
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
sqlite3incluido en la stdlib) executemany()es más pythónico que insertar fila a fila como en Java- La BD
dam.dbse recrea desde cero en cada ejecución
EJEMPLO B): MongoDB <-> Python
📄 Fichero: crud_mongodb.py
🔧 Dependencias: pip install pymongo[srv]
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_CONEXIONpor una conexión válida:- Atlas:
mongodb+srv://user:pass@cluster.xxxxx.mongodb.net/ - Local:
mongodb://localhost:27017
- Atlas:
- 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())