接着上一篇【python】Python和MongoDB:连接到NoSQL数据库-第三篇。
在Python和PyMongo中使用MongoDB
现在您知道了什么是MongoDB以及如何使用mongo Shell创建和管理数据库,您可以开始使用MongoDB,但这一次是使用Python。MongoDB提供了一个称为PyMongo的官方Python驱动程序。
在本节中,您将通过一些实例来帮助您了解如何使用PyMongo通过MongoDB和Python创建自己的数据库应用程序。
PyMongo中的每个模块负责数据库上的一组操作。您将至少具有执行以下任务的模块:
建立数据库连接使用数据库处理馆藏和文件操作光标使用数据加密通常,PyMongo提供了一组丰富的工具,可用于与MongoDB服务器通信。它提供查询,检索结果,写入和删除数据以及运行数据库命令的功能。
安装PyMongo
要开始使用PyMongo,首先需要将其安装在Python环境中。您可以使用虚拟环境,也可以使用系统范围的Python安装,尽管首选第一个选项。PyMongo在PyPI上可用,因此安装它的最快方法是使用pip。启动您的终端并运行以下命令:
经过几次下载和其他相关步骤,此命令将PyMongo安装在您的Python环境中。请注意,如果您没有提供特定的版本号,pip则将安装最新的可用版本。
注意:有关如何安装PyMongo的完整指南,请查看其官方文档的“安装/升级”页面。
安装完成后,您可以启动Python交互式会话并运行以下导入:
如果运行时未在Python Shell中引发异常,则您的安装工作正常。如果不是,则再次仔细执行这些步骤。
建立连接
要建立与数据库的连接,您需要创建一个MongoClient实例。此类为MongoDB实例或服务器提供了客户端。每个客户端对象都有一个内置的连接池,默认情况下,该池可处理与服务器的多达一百个连接。
回到您的Python交互式会话并MongoClient从导入pymongo。然后创建一个客户端对象与您当前正在运行的MongoDB实例进行通信:
上面的代码建立了到默认主机(localhost)和端口(27017)的连接。MongoClient接受一组参数,使您可以指定自定义主机,端口和其他连接参数。例如,要提供自定义主机和端口,可以使用以下代码:
当你需要提供这是非常方便host,并port从MongoDB的默认设置不同。您还可以使用MongoDB URI格式:
所有这些实例都MongoClient提供相同的客户端设置来连接您当前的MongoDB实例。您应该使用哪一个取决于您要在代码中显示的明确程度。
实例化之后MongoClient,就可以使用其实例来引用该特定的数据库连接,就像在上一节中对mongo shell db对象所做的一样。
使用数据库,馆藏和文档
连接到的实例后MongoClient,您就可以访问由指定的MongoDB服务器管理的任何数据库。要定义要使用的数据库,可以像在mongo shell中一样使用点表示法:
在这种情况下,rptutorials是您将使用的数据库的名称。如果数据库不存在,则MongoDB会为您创建数据库,但仅在您对数据库执行第一次操作时才创建。
如果数据库名称不是有效的Python标志符,则也可以使用字典式访问:
当您的数据库名称不是有效的Python标识符时,此语句很方便。例如,如果您的数据库名为rp-tutorials,那么您需要使用字典式访问。
注意:使用mongo外壳程序时,您可以通过db全局对象访问数据库。使用PyMongo时,可以将数据库分配给一个名为的变量,db以获取类似的行为。
使用PyMongo将数据存储在数据库mongo中的过程与上述各节中对Shell进行的操作类似。但是首先,您需要创建文档。在Python中,您可以使用字典来创建文档:
将文档创建为字典后,需要指定要使用的集合。为此,可以在数据库对象上使用点符号:
在这种情况下,tutorial是数据库的一个实例,Collection并代表数据库中的物理文档集合。您可以tutorial通过.insert_one()使用文档作为参数调用文档来插入文档:
在这里,.insert_one()take tutorial1,将其插入到tutorial集合中并返回一个InsertOneResult对象。该对象提供有关插入文档的反馈。请注意,由于MongoDB是ObjectI动态生成的,因此您的输出将与ObjectId上面显示的不匹配。
如果您有许多文档要添加到数据库中,则可以使用.insert_many()将它们一次性插入:
这比.insert_one()多次调用更快,更直接。调用会.insert_many()获取可迭代的文档,并将其插入数据库中的tutorial集合中rptutorials。该方法返回的实例InsertManyResult,该实例提供有关所插入文档的信息。
要从集合中检索文档,可以使用.find()。不带参数的情况下,.find()返回一个Cursor对象,该对象根据需要产生集合中的文档:
在这里,您可以在对象上运行一个循环,该循环.find()返回并打印后续结果,pprint.pprint()从而提供一种用户友好的输出格式。
您还可以使用.find_one()来检索单个文档。在这种情况下,您可以使用包含要匹配的字段的字典。例如,如果要检索Jon的第一个教程,则可以执行以下操作:
请注意,教程的ObjectId设置是在_id键下设置的,该键是将文档插入数据库时MongoDB自动添加的唯一文档标识符。
PyMongo还提供了从数据库替换,更新和删除文档的方法。如果你想更深入地了解这些功能,然后看看该文档的Collection。
#python#