Overview
Esta página describe algunas de las librerías más populares de terceros para trabajar con PyMongo. Con la excepción de Motor, todas las librerías en esta página son mantenidas por la Community. Para mantener esta lista actualizada, los proyectos que no se hayan actualizado recientemente serán ocasionalmente eliminados de la lista o trasladados al final.
Tip
Aunque estas librerías pueden ser útiles, recomendamos que los nuevos usuarios de PyMongo comiencen trabajando directamente con el driver. PyMongo por sí solo cubrirá las necesidades de la mayoría de la gente, y trabajar con él es instructivo para comprender cómo funciona MongoDB.
Capas similares a ORM
Las capas tipo ORM (tipo mapping objeto-relacional) agregan funcionalidades como modelos y validación a PyMongo.
MincePy es un mapeador objeto-documento (ODM) diseñado para que cualquier objeto Python sea almacenable y consultable en una base de datos MongoDB. Se diseñó pensando en el aprendizaje automático y en aplicaciones de ciencia computacional y experimental de big data. Sin embargo, es completamente general y puede ser útil para cualquiera que busque organizar, compartir o procesar grandes cantidades de datos con el menor cambio posible en su flujo de trabajo actual.
Ming es una librería que permite aplicar esquemas en una base de datos MongoDB en una aplicación Python. Fue desarrollada por SourceForge durante su migración a MongoDB. Consulta la entrada de blog introductoria para obtener más detalles.
MongoEngine te permite utilizar una sintaxis inspirada en el ORM de Django para definir esquemas de documentos y consultar colecciones.
MotorEngine es un puerto de MongoEngine a Motor, que permite el acceso asíncrono con Tornado. Implementa las mismas API de modelado de manera portátil de datos, lo que significa que un modelo definido en MongoEngine puede ser leído en MotorEngine.
uMongo es un ODM (Object Document Mapper) de MongoDB para Python que se creó para satisfacer dos necesidades: la falta de un ODM asincrónico y la dificultad para serializar documentos con otros ODM. uMongo funciona con varios controladores: PyMongo, TxMongo, motor_asyncio y mongomock. El código fuente está disponible en GitHub.
Herramientas de framework
Esta sección enumera herramientas y adaptadores que han sido diseñados para funcionar con diversos frameworks y librerías de Python.
Django
Puedes utilizar el Django MongoDB Backend oficial para usar MongoDB como base de datos en tus aplicaciones Django. Django MongoDB Backend es un backend de base de datos Django que utiliza PyMongo para conectarse a MongoDB. Al utilizar el backend, puedes usar los modelos Django para representar documentos de MongoDB, con soporte para formularios Django, validaciones y autenticación. Django MongoDB Backend también te permite utilizar optimizaciones de consultas específicas de MongoDB en tus aplicaciones, como operaciones de agregación e índices.
Importante
Vista previa pública
El backend de Django MongoDB está en vista previa pública y se destina únicamente a fines de evaluación. No se recomienda el Public Preview para implementaciones de producción, ya que podrían introducirse cambios disruptivos. Para obtener más información, consulta Funciones de vista previa.
Flask
Flask-MongoAlchemy agrega soporte Flask para MongoDB con MongoAlchemy.
Flask-MongoKit es una extensión de Flask para integrar mejor MongoKit en Flask.
Flask-PyMongo une Flask y PyMongo.
Otras herramientas
Generador de aplicación FastAPI Full pila te permite lanzar rápidamente una aplicación Full pila que integra FastAPI, React y MongoDB.
Log4Mongo es un manejador de registros de Python flexible que puede almacenar registros en MongoDB usando colecciones normales y limitadas.
mongodb_beaker permite usar MongoDB como backend para el sistema de Beaker de almacenamiento en caché y sesiones.
MongoLog es un controlador de registro de Python que almacena registros en MongoDB utilizando una colección con límite.
rod.receta.mongodb es una Buildout receta para descargar e instalar MongoDB.
Herramientas de interoperabilidad
Esta sección enumera las herramientas que admiten la interoperabilidad con otras herramientas.
gevent
PyMongo utiliza funciones de subprocesos y sockets de la librería estándar de Python. Al usar gevent, PyMongo puede realizar entradas/salidas asíncronas con sockets no bloqueantes y programar operaciones en greenlets en lugar de hilos.
Para utilizar gevent con PyMongo, llama a la función de gevent
monkey.patch_all() método antes de cargar cualquier otro módulo, como se muestra en el siguiente ejemplo:
# You must call patch_all() *before* importing any other modules from gevent import monkey _ = monkey.patch_all() from pymongo import MongoClient client = MongoClient()
Importante
Cierra MongoClient para evitar bloqueos
Si llamas a monkey.patch_all() al inicio de tu aplicación, MongoClient utilizará greenlets en lugar de subprocesos para supervisar el estado interno del servidor. Al cerrar, si tu aplicación llama al método ~gevent.hub.Hub.join() sin primero terminar estos greenlets, la llamada al método ~gevent.hub.Hub.join() se bloquea indefinidamente.
Para evitar esto, cierre o elimine la referencia a cualquier objeto MongoClient activo antes de cerrar su aplicación. En algunos marcos de aplicaciones, puedes utilizar un controlador de señales para finalizar los greenlets en segundo plano cuando tu aplicación reciba SIGHUP, como se muestra en el siguiente ejemplo:
import signal def graceful_reload(signum, traceback): """Explicitly close some global MongoClient object.""" client.close() signal.signal(signal.SIGHUP, graceful_reload)
Este problema afecta a las aplicaciones que usan versiones de uWSGI anteriores a 1.9.16 o versiones más recientes de uWSGI con la opción -gevent-wait-for-hub. Para más información, consulta el registro de cambios de uWSGI.
mod_wsgi
El paquete mod_wsgi proporciona un módulo de Apache que implementa una interfaz compatible con WSGI para alojar aplicaciones web basadas en Python sobre el servidor web Apache.
Para ejecutar su aplicación PyMongo bajo mod_wsgi, siga estas pautas:
Utiliza la directiva
WSGIDaemonProcesspara ejecutar mod_wsgi en modo demonio. Si la configuración de mod_wsgi solo incluye la directivaWSGIScriptAlias, se ejecutará en modo embebido.Utilice la directiva
WSGIApplicationGroup %{GLOBAL}para asegurarse de que su aplicación se ejecute en el intérprete Python principal del demonio, en lugar de un subintérprete. Esto evita un pequeño costo que se incurre al decodificar BSON en un subintérprete.Utiliza la directiva
WSGIProcessGrouppara asignar cada aplicación a un demonio independiente. Esto garantiza que las aplicaciones no afecten el estado de las demás.
La siguiente configuración de mod_wsgi muestra cómo usar las directivas anteriores para ejecutar tu aplicación PyMongo:
<VirtualHost *> WSGIDaemonProcess my_process WSGIScriptAlias /my_app /path/to/app.wsgi WSGIProcessGroup my_process WSGIApplicationGroup %{GLOBAL} </VirtualHost>
Si tienes varias aplicaciones PyMongo, coloca cada una en un demonio separado en el grupo de aplicaciones global:
<VirtualHost *> WSGIDaemonProcess my_process WSGIScriptAlias /my_app /path/to/app.wsgi <Location /my_app> WSGIProcessGroup my_process </Location> WSGIDaemonProcess my_other_process WSGIScriptAlias /my_other_app /path/to/other_app.wsgi <Location /my_other_app> WSGIProcessGroup my_other_process </Location> WSGIApplicationGroup %{GLOBAL} </VirtualHost>
Nota
Muchas extensiones C de Python tienen problemas al ejecutarse en varios sub-intérpretes de Python. Estas dificultades están explicadas en la documentación de Py_NewInterpreter y en la sección Múltiples subinterpretadores de Python de la documentación de mod_wsgi.
Comprobadores de tipo
Para obtener una lista de herramientas que pueden utilizar sugerencias de tipo para detectar errores en tu código, consulta Tipado estático con Python en la documentación del módulo typing.
Nota
Los valores por defecto para tipos de documentos genéricos aún no están disponibles en Mypy. Para una discusión sobre las limitaciones de Mypy que causaron este problema, consulta el repositorio de GitHub de Mypy.
Si estás usando Mypy y quieres dejar de usar los tipos proporcionados, añade las siguientes líneas a tu archivo de configuración de Mypy:
[mypy-pymongo] follow_imports = False
Drivers alternativos de Python
Esta sección enumera alternativas a PyMongo.
Motor es un controlador de MongoDB completo y no bloqueante para aplicaciones Python Tornado.
TxMongo es un driver asíncrono Twisted Python para MongoDB.
MongoMock es una pequeña librería para ayudar a probar código Python. Utiliza PyMongo para interactuar con MongoDB.
Nota
PyMongo es incompatible con PythonAnywhere
PyMongo crea subprocesos de Python, que PythonAnywhere no admite.
Para obtener más información, consulta el ticket de Jiracorrespondiente.