WEBINARHow to build smarter AI apps with Python and MongoDB. Register now >
NEWHow to build smarter AI apps with Python and MongoDB. Register now >

如何结合使用 Python 与 MongoDB

使用 Atlas 进行操作
立即免费连接

Python 是数据科学的顶级编程语言,而 MongoDB 具有灵活和动态的模式,非常适合构建现代 Web 应用程序、JSON API 和数据处理器等等。MongoDB 拥有原生 Python 驱动程序和致力于确保 MongoDB 和 Python 完美协作的工程师团队。

目录
Python 是什么?

Python 是当今动态类型语言中的瑞士军刀,全面支持常见的数据操作和处理任务,是数据科学和网络开发的最佳编程语言之一。 Python 的原生字典和列表数据类型 使其在操作 JSON 文档方面仅次于 JavaScript,非常适合使用 BSON。PyMongo 是 Python 的标准 MongoDB 驱动程序库,易于使用,为访问数据库、collection和文档提供了直观的 API。通过 PyMongo 从 MongoDB 获取的对象与字典和列表兼容,因此我们可以轻松地对它们进行操作、迭代和打印。

MongoDB 如何存储数据

MongoDB 将数据存储在类似 JSON 的文档中:

Python 字典如下所示:

请继续阅读,了解如何开始并发挥这种强大组合的潜力。

先决条件

下载 并在您的设备上安装 Python。要确认安装是否正确,请在命令行终端中键入 python --version。会出现类似于以下内容的结果:

即使您是 Python 新手,也可以按照本教程中的 Python MongoDB 示例进行操作。

我们建议您设置本教程的 MongoDB Atlas 免费级集群
立即启动您的免费级集群
了解有关 Atlas 的更多信息
连接 Python 和 MongoDB Atlas

PyMongo 有一组用于 Python MongoDB 交互的包。 对于以下教程,首先创建一个虚拟环境并激活它。

现在您已处于虚拟环境中,可以安装 PyMongo。 在终端中,输入:

现在,我们可以通过 import 语句在代码中使用 PyMongo 作为 Python MongoDB 库。

在 Python 中创建 MongoDB 数据库

将 Python 连接至 Atlas 的第一步是创建集群。您可以按照 文档 中的说明进行操作以了解如何创建和设置集群。

接下来,在任意文件夹中创建一个名为 pymongo_get_database.py 的文件来编写 PyMongo 代码。您可以使用任何简单的文本编辑器,如 Visual Studio Code。

通过添加以下内容创建 mongodb 客户端:

要创建 MongoClient,您需要一个指向数据库的连接字符串。如果您使用的是 Atlas,则可以按照 文档中的步骤 来获取该连接字符串。 使用 connection_string 创建 mongoclient 并获取 MongoDB 数据库连接。更改用户名、密码和集群名称。

在此 python mongodb 教程中,我们将创建一个购物清单并添加一些商品。为此,我们创建了一个数据库 user_shopping_list

在其中有集合和文档之前,MongoDB 不会创建数据库。接下来让我们创建一个集合。

在 Python 中创建集合

要创建集合,请将集合名称传递给数据库。在名为 pymongo_test_insert.py 的新文件中,添加以下代码。

这将在 user_shopping_list 数据库中创建一个名为 user_1_items 的集合。

在 Python 中插入文档

要同时插入多个文档,请使用 pymongo insert_many() 方法。

让我们插入第三个文档,而不指定 _id 字段。这次,我们添加一个数据类型为“date”的字段。要使用 PyMongo 添加日期,请使用 Python dateutil 包。

首先使用以下命令安装包:

将以下内容添加至 pymongo_test_insert.py

我们使用 insert_one() 方法插入单个文档。

打开命令行,导航到保存 pymongo_test_insert.py 的文件夹。使用以下命令执行文件:

让我们连接到 MongoDB Atlas UI,看看到目前为止有什么。

登录您的 Atlas 集群 并点击集合按钮。

左侧会显示我们创建的数据库和集合名称。如果单击集合名称,还可以查看数据:

数据库和集合名称的视图
点击即可查看数据的视图

_id 字段默认为 ObjectId 类型。如果我们不指定 _id 字段,MongoDB 也会生成相同的字段。并非一个文档中存在的所有字段都存在于其他文档中。但 MongoDB 不会阻止您输入数据,这是无模式数据库的本质。

如果再次插入 item_3,MongoDB 就会插入一个新文档,并带有新 _id 值。但是,由于唯一标识符 _id 字段,前两次插入会引发错误。

在 Python 中查询

让我们使用 find() 同时查看所有文档。为此,我们将创建一个单独的文件 pymongo_test_query.py

打开命令行并导航到保存 pymongo_test_query.py 的文件夹。使用以下命令执行该文件:

我们会得到字典对象列表的输出结果:

字典列表

我们可以查看数据,但格式不佳。因此,让我们通过将 print 行替换为以下内容来打印项目名称及其类别::

尽管 MongoDB 获得了全部数据,但第三个文档中出现了一个 Python“KeyError”。

Python KeyError

要处理 Python 中的丢失数据错误,请使用 pandas.DataFrames。DataFrames 是用于数据处理任务的二维数据结构。Pymongo find() 方法返回字典对象,可以通过一行代码将其转换为数据帧。

将 pandas 库安装为:

现在,通过在文件顶部添加以下行来导入 pandas 库:

并将循环中的代码替换为以下代码,以便一步处理 KeyError:

对于缺失值,错误由 NaN 和 NaT 所取代。

NaN 和 NaT 表示缺失值。
在 Python MongoDB 中编制索引

实际数据库中的文档和集合数量总是不断增加。在一个非常大的集合中搜索特定文档可能需要很长时间,例如,其要素中包含“通用面粉”的文档。索引使数据库搜索更快、更高效,并降低排序、计数和匹配等操作的查询成本。

在集合级别,MongoDB 定义索引

为了使索引更有意义,请将更多文档添加到我们的集合中。使用 insert_many() 方法一次插入多个文档。对于示例文档,从 github 复制代码 并在终端执行 python pymongo_test_insert_more_items.py

假设我们想要属于“食物”类别的项目:

要执行上述查询,MongoDB 必须扫描所有文档。要验证这一点,请下载 Compass。使用连接字符串连接到集群。打开集合并转到 Explain Plan 选项卡。在“过滤器”中,输入上述条件并查看结果:

不带索引的查询结果

请注意,该查询扫描 14 个文档以获取 5 个结果。

让我们在“类别”字段上创建一个索引。在名为 pymongo_index.py 的新文件中,添加以下代码。

在 Compass UI 上再次以相同方式使用过滤器:

带索引的查询结果

这次,由于类别索引的原因,只扫描了五个文档。由于文档数量少,我们认为执行时间没有显著差异。但我们发现为查询而扫描的文档数量大幅减少。索引还有助于优化 聚合 的性能。聚合超出了本教程的范围,但这里有 概览

总结

在该 Python MongoDB 教程中,我们学习了 PyMongo 的基础知识并执行了简单的数据库操作。下一步,利用业务数据探索使用 PyMongo 执行 CRUD 操作。如果您没有学习本教程,请立即从 免费安装 MongoDB Atlas 开始。MongoDB 大学 还有一门关于该特定主题的课程可供学习。

准备好开始了吗?

立即启动新集群或无宕机迁移至 MongoDB Atlas,并连接到 Python。
立即试用

常见问答