programar-un-simple-y-minim.../README.md

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

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.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)

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]

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())