文档菜单
文档首页
/ / /
PyMongo

第三方工具

在本页

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

此页面描述了与PyMongo一起使用的一些流行的第三方库。除Motor外,本页面上所有库均由社区维护。为了保持此列表最新,最近未更新的项目有时将从列表中删除或移至末尾。

提示

尽管这些库可能很有帮助,但我们建议新的PyMongo用户首先直接与驱动程序一起工作。PyMongo本身将满足大多数人的需求,并且使用它有助于了解MongoDB的工作方式。

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

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

  • Ming 是一个库,它允许你在 Python 应用程序中强制执行 MongoDB 数据库的模式。它是由 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的一些需要django.db的功能,如管理、身份验证和会话,将无法工作。

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

  • Django MongoEngine 是 Django 的 MongoDB 后端。仓库还包括一个 示例应用。更多信息请参阅 Django MongoEngine 文档

  • Djongo 是一个用于使用 MongoDB 作为数据库后端的 Django 连接器。使用 Djongo,您可以使用 Django Admin GUI 添加和修改 MongoDB 中的文档。您可以在 GitHub 上找到 Djongo 源代码,并且 Djongo 包 在 PyPI 上。

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

  • 全栈FastAPI应用生成器可以帮助您快速搭建一个集成了FastAPI、React和MongoDB的全栈应用程序。

  • Log4Mongo是一个灵活的Python日志处理程序,可以使用普通和限制集合将日志存储在MongoDB中。

  • mongobox是一个工具,可以在Python应用程序中运行沙盒化的MongoDB实例。

  • mongodb_beaker 允许您将 MongoDB 作为 Beaker 缓存和会话系统的后端。源代码位于 GitHub。

  • MongoLog 是一个使用 MongoDB 的 capped collection 存储日志的 Python 日志处理程序。

  • rod.recipe.mongodb 是一个用于下载和安装 MongoDB 的 Buildout 配方。

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

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

要使用 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 将使用 greenlets 而不是线程来监控服务器的健康状态。当关闭时,如果您的应用程序在首先终止这些 greenlets 之前调用 ~gevent.hub.Hub.join() 方法,则对 ~gevent.hub.Hub.join() 方法的调用将无限期地阻塞。

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

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

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

mod_wsgi 软件包提供了一种 Apache 模块,该模块实现了 WSGI 兼容接口,用于在 Apache 网络服务器上托管基于 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和mod_wsgi文档中的多个Python子解释器部分中进行了说明。

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

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

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

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

返回

时间序列数据