跳至主要内容

将 MongoDB 连接到 Python:PyMongo 上手前 10 分钟

了解什么是 PyMongo、为何 Python 开发者将其与 MongoDB 搭配使用,以及如何快速将 MongoDB 连接到您的 Python 应用。
· 5分钟 阅读

使用 AI 探索

准备好把您的 MongoDB 集群连接到 Python 项目了吗?您来对地方了。本文将介绍什么是 PyMongo、为什么它是使用 MongoDB 作为数据库的 Python 开发者的首选包,以及如何尽可能高效地建立您的第一个连接并跑起来。 

如果您刚开始上手,别错过我们的课程:Introduction to Using MongoDB for Data Science in Python。

什么是 PyMongo?

那么,PyMongo Python 包究竟是什么?它是 MongoDB 的官方 Python 驱动,允许开发者在 Python 应用与 MongoDB 数据库之间进行连接、查询和交互。 

它是从 Python 与 MongoDB 数据库交互的推荐方式,并且因与 Flask 和 Django 的良好兼容性,非常适合构建各类 Web 应用。它帮助 Python 开发者在不同应用中充分发挥 MongoDB 的优势。 

接下来,我们将通过运行一个示例 CRUD(创建、读取、更新、删除)用户应用来演示如何开始使用 PyMongo,您会发现只需极少的代码就能轻松上手! 

成功所需条件 

要顺利跟随本教程,请确保具备以下前提条件: 

  • 一个 MongoDB Atlas 帐号
  • 任意您偏好的 IDE(本教程使用 Google Colab 笔记本)
  • Python 3.6+
  • pip 已安装(如果您使用的不是 Google Colab 笔记本)。 

设置 MongoDB 集群 

在将 MongoDB 数据库连接到 Python 项目之前,我们需要先创建一个集群!为此,请登录您的MongoDB Atlas 帐号,如果还没有项目,请先创建一个新项目。 

 在 MongoDB Atlas 中创建项目

 然后,在该项目内创建一个集群。 

在项目内创建集群

现在可以部署集群了。点击“Free”层(永久免费!),为您的集群选择一个名称,或保留默认名称。 

请注意,一旦为集群命名,之后将无法更改。选择云服务商(可选 AWS、Google Cloud 和 Azure),并确保处于正确的区域。

部署您的集群

点击绿色的“Create Deployment”按钮,我们就可以继续了。 

系统会提示您为集群设置“Username”和“Password”。请设置一个既易记(别像本教程这样“太好记”)又安全的组合,因为每次访问连接字符串时都需要用到它们。 

同时请务必勾选“Preload sample dataset”,以便操作更简单。系统会自动加载我们将要使用的“sample_mflix”示例数据集。 

点击“Create Database User”继续。 

选择用户名和密码

现在,您可以连接到集群了!连接方式有很多,但由于本文聚焦于 PyMongo,我们将通过 Drivers 进行连接。 

连接到您的集群

选择“Python”及您希望使用的版本(我们选择 4.7 或更高版本),您就会看到连接字符串。为方便使用,系统会自动填入您的用户名和密码。

使用 MongoDB 驱动进行连接

既然已经拿到了连接字符串,请将其妥善保存。然后点击绿色的“Done”按钮。 

这就是配置完成后的集群界面。 

配置完成后的集群]

请前往左侧的“Network Access”,确保您的 IP 地址配置正确。出于教程演示的方便(当然不建议在生产环境这么做),您可以将 IP 地址设置为“Access from Anywhere”。 

生产环境警告:对于生产级应用,请在 Atlas 的 Network Access > IP Access List 中将特定 IP 加入白名单。 

现在前往您选择的 IDE,来实操一下这些数据吧! 

使用 PyMongo 进行连接与 CRUD 操作

第一步是用 pip 安装 pymongo。我们还会在此步骤安装 getpass,以确保连接的安全性:

!pip install pymongo

接着设置与集群的 MongoDB 连接。我们将使用 MongoClient 来建立连接。 

import getpass
from pymongo import MongoClient


# Get connection string from user
connection_string = getpass.getpass(prompt="Enter connection string WITH USER + PASS here: ")


try:
   client = MongoClient(connection_string)
   client.admin.command("ping")
   print("Successfully connected")
  
except Exception as e:
   print("Connection failed:", e)

回到集群查看数据库与集合的名称。数据库名为 sample_mflix,集合名为 users。 

下面是该示例集群中的信息示例。每个文档都有一个 ObjectId,以及每位用户的姓名、邮箱和密码。 

我们正在使用的集合

让我们运行一个小测试,确认可以从脚本中读取文档: 

database = client["sample_mflix"]
collection = database["users"]

for document in collection.find().limit(20):
    print(document)

运行成功后,您会看到如下输出:

确保我们已正确连接到 MongoDB 数据库

注意:sample_mflix 数据集包含明文密码,仅用于演示。在真实应用中务必对密码进行哈希处理(例如使用 bcrypt 或 Argon2),并避免硬编码凭据。

上面的步骤同时也是读取集群信息的方式!现在我们来创建一个新用户。 

new_user = {
   "name": "Anaiya Raisinghani",
   "email": "[email protected]",
   "password": "pleasedonothackme"
}

# insert the document
result = collection.insert_one(new_user)

print(result.inserted_id)

我们可以看到新用户的 ID。如果我回到集群,就能通过该 ID 搜索并确认新的用户文档是否出现:

搜索我们的新用户文档

现在,我们来更新刚创建的文档。 

注意:BSON 随 PyMongo 一同安装——无需额外安装。ObjectId 是 MongoDB 的默认唯一 ID 格式。

from bson import ObjectId

collection.update_one(
   {"_id": result.inserted_id}, # using the same document that we inserted above
   {"$set": {"password": "help!ivebeenhacked!!"}}
)

我们已更新文档

如您所见,密码已更新,修改已反映在 MongoDB Atlas 的界面中。 

接下来,我们删除这个文档。 

delete_user = collection.delete_one({"_id": result.inserted_id})

print("Deleted users:", delete_user.deleted_count)

被删除的用户数将为“1”。让我们在 MongoDB Atlas 界面中再次确认(以防万一)。

我们已成功删除用户

我们已经成功删除了该文档! 

结语

在本教程中,您完成了与 PyMongo(MongoDB 官方 Python 驱动)上手的前 10 分钟。我们成功读取了集合中的文档,创建了新用户,对其进行了更新,并最终删除!

想要了解更多 PyMongo 信息,请查看课程Introduction to Using MongoDB for Data Science in Python,并访问官方文档。

常见问题解答

连接 PyMongo 与 MongoDB 时有哪些常见错误?

常见问题包括连接字符串不正确、防火墙限制(IP 白名单)或身份验证失败。如果连接失败,请仔细检查您的凭据和网络设置。

PyMongo 是否支持异步编程?

PyMongo 本身不原生支持异步操作。如果您需要异步能力,请考虑使用 Motor,这是 MongoDB 官方的 Python 异步驱动。

PyMongo 能处理数据库事务吗?

可以。PyMongo 支持多文档的 ACID 事务,前提是您使用的是 MongoDB 副本集或分片集群。事务不适用于独立部署。

如何处理 PyMongo 的连接池?

PyMongo 会在幕后自动管理连接池。如有需要,您可以通过 MongoClient 设置配置连接池参数(如池大小和超时)。

我可以将 PyMongo 与 Pandas 搭配用于数据分析任务吗?

当然可以!您可以使用 PyMongo 轻松获取 MongoDB 数据,然后直接加载到 Pandas DataFrame 中进行数据分析和处理。

Anaiya Raisinghani

作者

Anaiya Raisinghani

Anaiya 是 MongoDB 的开发者倡导者,常驻纽约。

主题