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

简介

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

数据库驱动程序或连接器是一个将应用程序连接到数据库程序的程序。为了运用Python在MongoDB中履行CRUD操作,需求一个驱动来树立通讯通道。PyMongo是推荐的驱动程序,用于从Python中与MongoDB一起作业。

在本攻略中,你将编写一个Python脚本,在Ubuntu 20.04上本地装置的MongoDB服务器中创立、检索、更新和删去数据。最终,你将获得相关技能,了解数据如安在MongoDB和Python应用程序中移动的根本概念。

前提条件

在你继续学习本攻略之前,你将需求以下条件。

  • 一台Ubuntu 20.04服务器,至少有1GB的内存,依照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包装置程序的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中启用认证后创立的授权凭证。
  • authMechanismSCRAM-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数据库》。