EventJoin us at AWS re:Invent 2024! Learn how to use MongoDB for AI use cases. Learn more >>

如何结合使用 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。
立即试用

常见问答

如何将 MongoDB 连接到 Python?

将 MongoDB 连接到 Python 有三种方法:

  • PyMongo
    • 用于连接 MongoDB 和 Python 的原生驱动程序。 PyMongo 拥有通过 Python 代码执行数据库操作所需的所有库。PyMongo 属于低级别驱动程序,它快速直观,可提供更强大的控制力。
  • MongoEngine
    • MongoEngine 是一个文档对象映射器。 我们可以定义一个模式来映射应用程序对象和文档数据。
  • Djongo
    • 我们将 Djongo 用于使用 Django 框架的 python Web 应用程序。 它可将现有 SQL 查询转换为 mongodb 查询文档。

了解有关使用 MongoEngine 和 Djongo 的更多信息

哪种数据库最适合用与 Python 搭配使用?

Python 可与多种不同的数据库搭配使用。具体使用哪种数据库取决于您的项目需求。MongoDB 具有灵活的模式,可紧密地映射到 Python 原生对象,非常适合用于 Python 应用程序。因此,将 Python 和 MongoDB 搭配使用非常适合 Web 开发方面的工作。

有关更多信息,请参阅 NoSQL 与 SQL 数据库。此外,还有一些原生 python 数据库,但它们并不流行,而且功能也非常有限。

MongoDB 适合与 Python 搭配使用吗?

MongoDB 以灵活、无模式且类似于 JSON 文档的形式存储数据。Python 拥有丰富的库,可直接处理 JSON 和 BSON 数据格式。 通过 PyMongo、MongoEngine 等驱动程序,Python 可与 MongoDB 完美集成。

由于不受数据库模式限制,MongoDB 非常适合与 Python 一起使用。

Python 如何在 MongoDB 中存储数据?

Python 通过 PyMongo 和 MongoEngine 等库在 MongoDB 中存储数据。对于使用 Django 框架的 Web 应用程序,我们可以使用 Djongo。

  • PyMongo:PyMongo 是 MongoDB 数据库的原生 python 驱动程序。它属于低级别驱动程序,速度更快,同时也是连接 Python 和 MongoDB 的首选方式。
  • MongoEngine:使用 MongoEngine,我们可以创建模式(对于无模式数据库)。 MongoEngine 按照 ODM 方法来映射应用程序类和数据库文档。
  • Djongo:Djongo 是一个 SQL 转译器。 您可以将现有 SQL 项目迁移到 MongoDB,而无需对代码进行过多更改。

了解有关使用 MongoEngine 和 Djongo 的更多信息

如何将 MongoDB 与 Python 搭配使用?
我们可以使用 PyMongo 将 MongoDB 与 Python 进行连接。Pymongo 是 MongoDB 的原生 Python 驱动程序。 它具有类似于 MongoShell 的语法,让我们能够轻松关联并使用正确的方法。 例如,MongoShell 上的 insertMany() 对应于 PyMongo 中的 insert_many()。 我们还可以使用 MongoEngine 和 Djongo 来连接 Python 和 MongoDB。 不过,首选方法是使用 PyMongo,因为它属于低级别驱动程序,可提供更快的速度和更强大的控制力。如需了解有关 PyMongo 的更多信息,请参阅我们的文档 [PyMongo] (https://pymongo.readthedocs.io/en/stable/)。
如何使用 Python 从 MongoDB 中获取数据?

在 Python 中连接到 MongoDB 的一个最简单有效的方法是使用 PyMongo。PyMongo 是 MongoDB 的原生 Python 驱动程序。 要进行连接,需要使用 pymongo.MongoClient() 命令,并将 connection_string 作为参数。然后,可以使用 find() 方法获取所需文档。示例:

import pymongo

# 使用 pymongo 从 python 连接到 mongodb
client = pymongo.MongoClient(CONNECTION_STRING)
# 打开数据库
dbname = client['user_shopping_list']
# 获取集合
collection_name = dbname["item_details"]
# 从集合中获取数据
item_details = collection_name.find()import pymongo

# 使用 pymongo 从 python 连接到 mongodb
client = pymongo.MongoClient(CONNECTION_STRING)
# 打开数据库
dbname = client['user_shopping_list']
# 获取集合
collection_name = dbname["item_details"]
# 从集合中获取数据
item_details = collection_name.find()
如何使用 Python 将数据插入 MongoDB?

要插入数据,请使用 PyMongo 连接 MongoDB 和 Python。PyMongo 是 MongoDB 的原生 Python 驱动程序。 连接后,我们可以使用 PyMongo 提供的方法,如“insertone()”和“insertmany()”。示例:

# 获取 mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# 获取/创建数据库
dbname = client['user_shopping_list']

# 获取/创建集合
collection_name = dbname["item_details"]

# 创建文档
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# 插入一行
collection_name.insert_one(item_1)# 获取 mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# 获取/创建数据库
dbname = client['user_shopping_list']

# 获取/创建集合
collection_name = dbname["item_details"]

# 创建文档
item_1 = {"item_name": "Bread",...,"category" : "food",
"quantity" : 2}

# 插入一行
collection_name.insert_one(item_1)
如何使用 Python 在 MongoDB 中创建数据库?

我们可以使用 PyMongo 驱动程序,通过 Python 代码来创建 MongoDB 数据库。示例:

import pymongo

# 获取 mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# 获取/创建数据库
dbname = client['user_shopping_list']import pymongo

# 获取 mongoclient
client = pymongo.MongoClient(CONNECTION_STRING)

# 获取/创建数据库
dbname = client['user_shopping_list']
SQL 数据库与 NoSQL 数据库之间的区别

SQL 数据库也称为“关系型数据库”,NoSQL(“非 SQL”或“不仅包含 SQL”)数据库也称为“非关系型数据库”。之所以将其命名为“关系型数据库”,是因为它是基于数学中的“关系型数据模型”。

SQL 数据库以表的形式存储数据,这些表具有固定的行和列。NoSQL 数据库具有多种类型,例如:

  1. 文档类型:JSON 文档

  2. 键值:键值对

  3. 宽列:宽列数据存储具有带行和动态列的表

基于 SQL 的数据库示例包括 MySQL、Microsoft SQL Server、PostgreSQL 和 SQLite。NoSQL 数据库示例包括 MongoDB、CouchDB、Redis、DynamoDB 等。

如需详细了解二者之间的区别,请参阅 SQL 与 NoSQL