Docs 菜单

Docs 主页开发应用程序Python 驱动程序pymongo

第三方工具

在此页面上

  • Overview
  • 类 ORM 层
  • 框架工具
  • Django
  • Flask
  • 其他工具
  • 互操作性工具
  • gevent
  • mod_wsgi
  • 替代 Python 驱动程序

本页介绍了使用 PyMongo 的一些流行的第三方库。 除 Motor 外,此页面上的所有库均由社区维护。 为了保持此列表的最新性,最近未更新的项目偶尔会从列表中删除或移动到最后。

提示

尽管这些库可能很有用,但我们建议 PyMongo 新用户从直接使用驱动程序开始。 仅 PyMongo 就可以满足大多数人的需求,使用它对了解 MongoDB 的工作原理很有启发。

类 ORM(类对象关系映射)层为 PyMongo 添加了模型和验证等功能。

  • MincePy 是一个对象文档映射器 (ODM),旨在使任何Python 对象可在 中存储和查询。MongoDB database它在设计时考虑了机器学习和大数据计算和实验科学应用。 但是,它是完全通用的,对于任何希望在尽可能少地改变当前工作流程的情况下组织、共享或处理大量数据的人来说都是非常有用的。

  • 是一个库,允许您在MongoDB database Python应用程序中对 实施模式。它由 SourceForge 开发 在迁移到 MongoDB 的过程中。请参阅 介绍性博 文 了解更多详情。

  • MongoEngine 允许您使用受 Django ORM 启发的语法来定义文档和查询集合的模式。该代码可在Github 上找到。

  • MotorEngine 是 MongoEngine 到 Motor 的端口,允许使用 Tornado 进行异步访问。它以数据可移植的方式实现相同的建模 API,这意味着 MongoEngine 中定义的模型可以在 MotorEngine 中读取。 源代码可在Github 上找到。

  • uMongo 是一个 Python MongoDB ODM,旨在满足两个需求:缺少异步 ODM,以及使用其他 ODM 序列化文档的困难。uMongo 可与多种驱动程序配合使用:PyMongo、TxMongo、 motor_asyncio 和 mongomock。 源代码可在Github 上找到。

本部分列出了设计用于与各种 Python 框架和库配合使用的工具和适配器。

即使没有 Django 后端,您也可以将 MongoDB 和 PyMongo 与 Django 提供的大部分功能一起使用。 仅使用 MongoDB 时,需要 django.db的 Django 某些功能(例如管理、身份验证和会话)将不起作用。

  • DjangoMongoDB 引擎 是适用于MongoDB database Django 的 后端,支持 Django 聚合、原子更新、嵌入式对象、Map/Reduce 和 GridFS。它允许您使用 Django 的大部分内置功能,包括 ORM、管理、身份验证、站点和会话框架以及缓存。 有关更多信息,请参阅 MongoDB 引擎教程。

  • Django MongoEngine 是 Django 的 MongoDB 后端。该存储库还包括一个 示例应用程序 。有关更多信息,请参阅 Django MongoEngine 文档。

  • Djongo 是一个connector ,用于将MongoDB 用作数据库后端的 Django。借助 Djongo,您可以使用 Django 管理 GUI 在 MongoDB 中添加和修改文档。 Djongo 源代码 托管在Github 上,并且 Djongo 包 在 PyPI 上。

  • mango 为 Django 会话和身份验证提供 MongoDB 后端(完全绕过django.db )。

  • 记录4mongo 是一个灵活的Python 日志记录处理程序,可以使用普通集合和固定大小集合在MongoDB 中存储日志。

  • mongobox 是一个从 Python 应用程序中运行沙盒 MongoDB 实例的工具。

  • mongodb_beaker 使您能够将 MongoDB 用作 Beaker 的 后端 缓存和会话系统。来源位于Github 上。

  • MongoLog 是一个 Python 日志记录处理程序,它使用固定大小集合将日志存储在 MongoDB 中。

  • rod.recipe.mongodb 是一个 构建 下载和安装 MongoDB 的诀窍。

本部分列出了支持与其他工具互操作的工具。

PyMongo 使用 Python 标准库中的线程和套接字函数。 使用 gevent ,PyMongo 可以使用非阻塞套接字执行异步 I/O,并在 greenlet 上调度操作 而不是线程。

要将 gevent 与 PyMongo 结合使用,请在加载任何其他模块之前调用 gevent 的monkey.patch_all()方法,如以下示例所示:

# You must call patch_all() *before* importing any other modules
from gevent import monkey
_ = monkey.patch_all()
from pymongo import MongoClient
client = MongoClient()

重要

关闭 MongoClient 以避免阻塞

如果您在应用程序启动时调用monkey.patch_all()MongoClient将使用 greenlet 而不是线程来监控服务器的运行状况。 关闭时,如果应用程序在没有先终止这些 greenlet 的情况下调用~gevent.hub.Hub.join()方法,则对~gevent.hub.Hub.join()方法的调用会无限期阻塞。

为避免这种情况,请在退出应用程序之前关闭或取消引用任何活动的MongoClient对象。 在某些应用程序框架中,您可以使用信号处理程序在应用程序收到SIGHUP时结束后台 greenlet,如以下示例所示:

import signal
def graceful_reload(signum, traceback):
"""Explicitly close some global MongoClient object."""
client.close()
signal.signal(signal.SIGHUP, graceful_reload)

此问题会影响使用早于1.9.16的 uWSGI 版本或带有-gevent-wait-for-hub选项的较新 uWSGI 版本的应用程序。 有关更多信息,请参阅 uWSGI 变更日志。

mod_wsgi 软件包提供了一个 Apache 模块,该模块实现了符合 WSGI 的接口,用于在 Apache Web 服务器上托管基于 Python 的 Web 应用程序。

要在 mod_wsgi 下运行 PyMongo 应用程序,请遵循以下指南:

  • 使用WSGIDaemonProcess指令在守护进程模式下运行 mod_wsgi。 如果您的 mod_wsgi 配置仅包含WSGIScriptAlias指令,则它将在嵌入式模式下运行。

  • 使用WSGIApplicationGroup %{GLOBAL}指令确保您的应用程序在守护程序的主 Python 解释器中运行,而不是在子解释器中运行。 这样可以避免在子解释器中解码 BSON 时产生的少量成本。

  • 使用WSGIProcessGroup指令将每个应用程序分配给一个单独的守护进程。 这可确保应用程序不会影响彼此的状态。

以下 mod_wsgi 配置显示了如何使用上述指令来运行 PyMongo 应用程序:

<VirtualHost *>
WSGIDaemonProcess my_process
WSGIScriptAlias /my_app /path/to/app.wsgi
WSGIProcessGroup my_process
WSGIApplicationGroup %{GLOBAL}
</VirtualHost>

如果您有多个 PyMongo 应用程序,请将每个应用程序放在全局应用程序组中的单独守护进程中:

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

注意

许多 Python C 扩展在多个 Python 子解释器中运行时都会出现问题。 Py_NewInterpreter 的文档中解释了这些困难 在 多个 Python 子解释器 中 mod_wsgi 文档部分。

本节列出了 PyMongo 的替代方案。

  • Motor 是一个功能齐全的非阻塞 MongoDB 驱动程序,适用于 Python Tornado 应用程序。

  • TxMongo 是适用于 MongoDB 的异步 Twisted Python 驱动程序。

  • MongoMock 是一个帮助测试 Python 代码的小型库。它使用 PyMongo 与 MongoDB 交互。

← 通用唯一 ID (UUID)