104 lines
3.0 KiB
Python
104 lines
3.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Acceso a MongoDB desde Python (CREATE + READ)
|
|
Equivalente al ejemplo Java: acceso-a-MongoDB-via-java.jar
|
|
|
|
Requisito: pip install pymongo
|
|
"""
|
|
|
|
from pymongo import MongoClient
|
|
|
|
# Cadena de conexión a MongoDB Atlas (misma que en el ejemplo Java)
|
|
CADENA_CONEXION = "mongodb+srv://MACARENA:XnUKVeI5VcNE4LK1@clusterdam2025.9q7lm.mongodb.net/?retryWrites=true&w=majority&appName=ClusterDAM2025"
|
|
DB_NAME = "dam"
|
|
|
|
|
|
def conectar():
|
|
cliente = MongoClient(CADENA_CONEXION)
|
|
# Ping para confirmar conexión (como en el Java)
|
|
cliente.admin.command("ping")
|
|
print("¡Ping exitoso! Conectado correctamente a MongoDB.")
|
|
return cliente
|
|
|
|
|
|
def listar_bases_de_datos(cliente):
|
|
print("\nBases de datos disponibles:")
|
|
for nombre in cliente.list_database_names():
|
|
print(f" - {nombre}")
|
|
|
|
|
|
def crear_colecciones(db):
|
|
# Limpiar datos anteriores para partir de cero
|
|
db.profesores.drop()
|
|
db.alumnos.drop()
|
|
|
|
# CREATE - Profesores (mismos datos que en el ejemplo SQLite)
|
|
profesores = [
|
|
{"_id": 1, "nombre": "Pedro García", "asignatura": "Matemáticas"},
|
|
{"_id": 2, "nombre": "Laura Martínez", "asignatura": "Física"},
|
|
{"_id": 3, "nombre": "José Rodríguez", "asignatura": "Química"},
|
|
]
|
|
db.profesores.insert_many(profesores)
|
|
|
|
# CREATE - Alumnos
|
|
alumnos = [
|
|
{"nombre": "Carlos Pérez", "edad": 20, "id_profesor": 1},
|
|
{"nombre": "Ana López", "edad": 22, "id_profesor": 2},
|
|
{"nombre": "Luis Fernández", "edad": 21, "id_profesor": 3},
|
|
]
|
|
db.alumnos.insert_many(alumnos)
|
|
|
|
print(f"\nDatos insertados en '{db.name}'.")
|
|
|
|
|
|
def listar_colecciones(db):
|
|
print(f"\nColecciones en '{db.name}':")
|
|
for nombre in db.list_collection_names():
|
|
print(f" - {nombre}")
|
|
|
|
|
|
def consultar(db):
|
|
# READ - Mostrar documentos (estilo Java: recorrer claves)
|
|
for coleccion_nombre in ["profesores", "alumnos"]:
|
|
coleccion = db[coleccion_nombre]
|
|
print(f"\nDocumentos en '{coleccion_nombre}':")
|
|
for doc in coleccion.find():
|
|
for clave, valor in doc.items():
|
|
print(f" {clave}: {valor}")
|
|
print(" ---")
|
|
|
|
# READ - Consulta con lookup (equivalente al JOIN de SQLite)
|
|
pipeline = [
|
|
{"$lookup": {
|
|
"from": "profesores",
|
|
"localField": "id_profesor",
|
|
"foreignField": "_id",
|
|
"as": "profesor"
|
|
}},
|
|
{"$unwind": "$profesor"}
|
|
]
|
|
print("\nAlumnos y sus profesores:")
|
|
for doc in db.alumnos.aggregate(pipeline):
|
|
print(f" Alumno: {doc['nombre']} | Profesor: {doc['profesor']['nombre']}")
|
|
|
|
|
|
def main():
|
|
print("Hello and welcome!\n")
|
|
|
|
cliente = conectar()
|
|
try:
|
|
listar_bases_de_datos(cliente)
|
|
|
|
db = cliente[DB_NAME]
|
|
|
|
crear_colecciones(db) # CREATE
|
|
listar_colecciones(db) # READ estructura
|
|
consultar(db) # READ datos
|
|
finally:
|
|
cliente.close()
|
|
print("\nConexión cerrada.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|