如何在Ubuntu20.04上使用PyMongo在MongoDB中执行CRUD操作
作为 Write for DOnations 计划的一部分,作者选择了 Free and Open Source Fund 来接受捐赠。
介绍
MongoDB 是一个通用的、面向文档的 NoSQL 数据库程序,它使用类似 JSON 的文档来存储数据。 与关系数据库中使用的表格关系不同,类似 JSON 的文档允许灵活和动态的模式,同时保持简单性。 一般来说,NoSQL 数据库具有水平扩展的能力,使其适用于大数据和实时应用程序。
数据库驱动程序或连接器是将应用程序连接到数据库程序的程序。 要使用 Python 在 MongoDB 中执行 CRUD 操作,需要驱动程序来建立通信通道。 PyMongo 是从 Python 使用 MongoDB 的推荐驱动程序。
在本指南中,您将编写一个 Python 脚本,用于在 Ubuntu 20.04 上本地安装的 MongoDB 服务器中创建、检索、更新和删除数据。 最后,您将获得相关技能,以了解数据如何在 MongoDB 和 Python 应用程序之间移动的基本概念。
先决条件
在继续阅读本指南之前,您将需要以下内容:
- 按照 Ubuntu 20.04 初始服务器设置指南 设置一台具有至少 1GB RAM 的 Ubuntu 20.04 服务器,包括 sudo 非 root 用户和防火墙。
- 使用此快速入门指南 在 Ubuntu 20.04 上设置环境的 Python 3 安装。
- 使用 如何在 Ubuntu 20.04 上安装 MongoDB 指南 安装与 Ubuntu 20.04 兼容的最新 MongoDB 服务器。
- Ubuntu 20.04 上 MongoDB 的 安全配置,以防止未经授权的访问。
第 1 步 — 设置 PyMongo
在此步骤中,您将安装 PyMongo,这是 Python 中推荐的 MongoDB 驱动程序。 作为使用 MongoDB 的工具集合,PyMongo 使用 Python 原生的语法和接口来促进数据库请求。
要启用 PyMongo,请打开您的 Ubuntu 终端并从 Python 包索引 安装。 建议在虚拟环境中安装 PyMongo,以隔离您的 Python 项目。 如果您错过了先决条件中如何设置虚拟环境,请参阅本指南。
pip3 install pymongo
pip3
是指 Python 流行的 pip 包安装程序的 Python 3 版本。 请注意,在 Python 3 虚拟环境中,您可以使用命令 pip
而不是 pip3
。
现在,使用以下命令打开 Python 解释器。 解释器是一个像 Unix shell 一样运行的虚拟机,您可以在其中交互式地执行 Python 代码。
python3
当您获得类似于以下内容的输出时,您就在解释器中:
OutputPython 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information.
输出成功后,在 Python 解释器中导入 pymongo
:
import pymongo
使用 import
语句,您可以在终端中访问 pymongo
模块及其代码。 import
语句将运行而不会引发异常。
在下一行,导入 getpass:
from getpass import getpass
getpass
是用于管理密码输入的模块。 该模块在不显示输入的情况下提示您输入密码,并添加了一种安全机制以防止将密码显示为明文。
在这里,与 MongoClient 建立连接以启用数据库的 MongoDB 实例。 用 host
、username
、password
和 authMechanism
作为参数声明一个变量 client
来保存 MongoClient 实例:
client = pymongo.MongoClient('localhost', username='username', password=getpass('Password: '), authMechanism='SCRAM-SHA-256')
要在启用授权的情况下连接到 MongoDB,MongoClient 需要四个参数:
- host - 安装 MongoDB 的服务器的主机名。 由于 Mongo 在这种情况下是本地的,因此使用
localhost
。 - username 和 password - 在 MongoDB 中启用身份验证后创建的授权凭据。
- authMechanism -
SCRAM-SHA-256
是配置为使用 MongoDB 4.0 或更高版本进行身份验证的集群支持的默认身份验证机制。
建立客户端连接后,您现在可以与 MongoDB 实例进行交互。
第 2 步 — 测试数据库和集合
在这一步中,您将熟悉 NoSQL 概念,例如应用于 MongoDB 的集合和文档。
MongoDB 支持在一个 MongoClient 实例中管理多个独立的数据库。 您可以使用 MongoClient 实例上的属性样式访问或创建数据库。 声明一个变量 db
并将新数据库分配为 client
的属性:
db = client.workplace
在这种情况下,workplace
数据库会跟踪您将添加的员工记录,例如员工的姓名和角色。
接下来,创建一个集合。 与关系数据库中的表一样,集合在 MongoDB 中存储一组文档。 在您的 Python 解释器中,创建一个 employees
集合作为 db
的属性,并将其分配给同名的变量:
employees = db.employees
创建 employees
集合作为 db
的属性,并将其分配给同名变量。
注意: 在 MongoDB 中,数据库和集合是惰性创建的。 这意味着在创建第一个文档之前,实际上没有执行上述代码。
现在您已经回顾了集合,让我们看看 MongoDB 如何表示文档,即表示数据的基本结构。
第 3 步 - 执行 CRUD 操作
在这一步中,您将执行 CRUD 操作来操作 MongoDB 中的数据。 创建、检索、更新和删除 (CRUD) 是计算机编程中可以执行以创建持久存储的四个基本操作。
为了将 Python 中的数据表示为类似 JSON 的文档,使用了字典。 使用 name
和 role
属性创建示例员工记录:
employee = { "name": "Sammy", "role": "Developer" }
如您所见,Python 字典 在语法上与 JSON 文档非常相似。 PyMongo 将 Python 字典转换为 JSON 文档以进行可扩展的数据存储。
此时,将员工记录插入到 employees
集合中:
employees.insert_one(employee)
在 employees
集合上调用 insert_one()
方法,提供之前创建的要插入的员工记录。 成功的插入应该返回一个成功的输出,如下所示:
Output<pymongo.results.InsertOneResult object at 0x7f8c5e3ed1c0>
现在,验证您已成功插入员工记录和集合。 进行查询以查找您刚刚创建的员工:
employees.find_one({"name": "Sammy"})
使用名称查询在 employees
集合上调用 find_one()
方法会返回一个匹配的文档。 当您只有一个文档或对第一个匹配项感兴趣时,此方法很有用。
输出应与此类似:
Output{'_id': ObjectId('606ae5b2358ddf640da46894'), 'name': 'Sammy', 'role': 'Developer'}
注意: 插入文档时,如果文档中尚未包含 _id
键,则会自动将唯一键 _id
添加到文档中。
如果需要修改现有文档,请使用 update_one()
方法。 update_one()
方法需要两个参数,query
和 update
:
- query -
{"name": "Sammy"}
- PyMongo 将使用此查询参数来查找具有匹配元素的文档。 - update -
{ "$set": {"role": "Technical Writer"} }
- update 参数实现了 $set 运算符,它将字段的值替换为指定的值。
在 employees
集合上调用 update_one()
方法:
employees.update_one({"name": "Sammy"}, { "$set": {"role": "Technical Writer"} })
成功更新将返回类似于以下内容的输出:
Output<pymongo.results.UpdateResult object at 0x7f8c5e3eb940>
要删除单个文档,请使用 delete_one()
方法。 delete_one()
需要指定要删除的文档的查询参数。 将 delete_one()
方法作为 employees
集合的属性执行,并将名称 Sammy
作为查询参数。
employees.delete_one({"name": "Sammy"})
这将删除您在 employees
集合中的唯一条目。
Output<pymongo.results.DeleteResult object at 0x7f8c5e3c8280>
再次使用 find_one()
方法,很明显您已经成功删除了 Sammy 的员工记录,因为控制台没有打印任何内容。
employees.find_one({"name": "Sammy"})
insert_one()
、find_one()
、update_one()
和 delete_one()
是使用 PyMongo 在 MongoDB 中开始执行 CRUD 操作的好方法。
结论
在本指南中,您探索了如何设置和配置数据库驱动程序 PyMongo,以将 Python 代码连接到 MongoDB,以及创建、检索、更新和删除文档。 虽然本指南侧重于介绍性概念,但 PyMongo 提供了更多 强大和灵活 使用 MongoDB 的方式。 例如,您可以进行批量插入、查询多个文档、为查询添加索引等等。
要了解有关 MongoDB 管理的更多信息,请参阅 如何在 Ubuntu 20.04 上备份、恢复和迁移 MongoDB 数据库和 如何在 Ubuntu 20.04 上导入和导出 MongoDB 数据库。