Docs 菜单
Docs 主页
/ / /
Pymongo 驱动程序

第三方集成和工具

在此页面上

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

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

提示

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

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

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

  • 是一个库,允许您在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 后端,将 MongoDB 用作 Django 应用程序中的数据库。 Django MongoDB Backend 是一个 Django 数据库后端,它使用 PyMongo 连接到 MongoDB。通过使用后端,您可以使用 Django 模型来表示 MongoDB 文档,并支持 Django 表单、验证和身份验证。 Django MongoDB 后端还允许您在应用程序中使用特定于 MongoDB 的查询优化,例如聚合操作和索引。

重要

公开预览版

Django MongoDB后端处于公共预览阶段,仅用于评估目的。 不建议将公共预览版用于生产部署,因为可能会引入重大更改。

  • 全栈 FastAPI App Generator 使您能够快速启动集成了 FastAPI、 React和MongoDB的全栈应用程序。

  • 记录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 文档部分。

有关可使用类型提示检测代码错误的工具列表,请参阅 typing模块文档中的Python静态类型化。

注意

通用文档类型的默认值在 Mypy 中尚不可用。有关导致此问题的 Mypy 限制的讨论,请参阅Mypy Github存储库。

如果您正在使用 Mypy 并希望选择不使用提供的类型,请将以下行添加到您的 Mypy 配置文件中:

[mypy-pymongo]
follow_imports = False

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

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

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

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

注意

PyMongo与 PythonAnywhere 不兼容

PyMongo创建Python线程,而 PythonAnywhere 不支持。

有关更多信息,请参阅相关的 Jira 工单。

后退

TLS