如何在Ubuntu 20.04上使用PyMongo在MongoDB中执行CRUD操作

1,769 阅读7分钟

作者选择了自由和开放源码基金,作为Write for DOnations计划的一部分接受捐赠。

简介

MongoDB是一个通用的、面向文档的、NoSQL数据库程序,使用类似JSON的文档来存储数据。与关系型数据库中使用的表格关系不同,JSON-like文档允许灵活和动态的模式,同时保持简单性。一般来说,NoSQL数据库具有横向扩展的能力,使其适用于大数据和实时应用。

数据库驱动程序或连接器是一个将应用程序连接到数据库程序的程序。为了使用Python在MongoDB中执行CRUD操作,需要一个驱动来建立通信通道。PyMongo是推荐的驱动程序,用于从Python中与MongoDB一起工作。

在本指南中,你将编写一个Python脚本,在Ubuntu 20.04上本地安装的MongoDB服务器中创建、检索、更新和删除数据。最后,你将获得相关技能,了解数据如何在MongoDB和Python应用程序中移动的基本概念。

前提条件

在你继续学习本指南之前,你将需要以下条件。

第1步 - 设置PyMongo

在这一步,你将安装PyMongo,它是Python中推荐的MongoDB的驱动。作为一个与MongoDB合作的工具集合,PyMongo使用Python原生的语法和接口来促进数据库请求。

要启用PyMongo,请打开Ubuntu终端并从Python软件包索引中安装。建议将PyMongo安装在一个虚拟环境中,以便隔离你的Python项目。如果你错过了如何在先决条件中设置一个虚拟环境,请参考本指南

pip3 install pymongo

pip3 指的是流行的Pythonpip包安装程序的Python3版本。注意,在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实例。声明一个变量client 来保存 MongoClient 实例,并将host,username,password, 和authMechanism 作为参数。

client = pymongo.MongoClient('localhost', username='username', password=getpass('Password: '), authMechanism='SCRAM-SHA-256')

为了连接到启用了授权的MongoDB,MongoClient需要四个参数。

  • host- 安装MongoDB的服务器的主机名。由于Mongo在这种情况下是本地的,所以使用localhost
  • usernameandpassword- 在MongoDB中启用认证后创建的授权凭证。
  • authMechanism-SCRAM-SHA-256 是配置了MongoDB 4.0或更高版本认证的集群所支持的默认认证机制。

一旦你建立了客户端连接,你现在就可以与你的MongoDB实例进行交互。

第2步 - 测试数据库和集合

在这一步,你将熟悉应用于MongoDB的NoSQL概念,如集合和文档。

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的文档形式表示数据,使用了字典。创建一个带有namerole 属性的雇员记录样本。

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() 方法需要两个参数:queryupdate

  • query-{"name": "Sammy"} - PyMongo将使用这个查询参数来寻找具有匹配元素的文档。
  • update-{ "$set": {"role": "Technical Writer"} } - update参数实现了 $set operator,它用指定的值替换了一个字段的值。

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() 是在MongoDB中用PyMongo执行CRUD操作的好方法。

总结

在本指南中,你已经探索了如何设置和配置数据库驱动PyMongo,以将Python代码连接到MongoDB,以及创建、检索、更新和删除文档。尽管本指南的重点是介绍性的概念,但PyMongo提供了与MongoDB合作的更强大和灵活的方式。例如,你可以进行批量插入,查询一个以上的文档,为查询添加索引等等。

要了解更多关于MongoDB管理的信息,请参阅《如何在Ubuntu 20.04上备份、恢复和迁移MongoDB数据库》和《如何在Ubuntu 20.04上导入和导出MongoDB数据库》。