Python是目前比较流行的程序设计语言,特别是在人工智能和大数据分析处理上,市场空间是比较大的。写此同时,MongDB是比较流行的NoSQL数据库的解决方案,两者结合使用的场景非常多。

要想在Python项目中使用MongoDB数据库,需要在Python标准库的基础上添加对MongoDB的支持。截止到目前,常用的开发MongoDB的包为PyMongo。下面将针对PyMongo的相关内容进行详细介绍。

PyMongo的概念

PyMongo是用于MongoDB的开发工具,是Python 操作MongoDB数据库的推荐方式。

PyMongo中主要提供了如下类与MongoDB数据库进行交互:

◆MongoClient类:用于与MongoDB服务器建立连接。

◆DataBase类:表示MongoDB中的数据库。

◆Collection 类:表示MongoDB中的集合。

◆Cursor 类:表示查询方法返回的结果,用于对多行数据进行遍历。

PyMongo库的基本使用流程如下:

(1)创建一个MongoClient类的对象,与MongDB服务器建立连接。

(2)通过MongoClient对象访问数据库(DataBase 对象)。

(3)使用上个步骤的数据库创建一个集合Colletio对象)。

(4)调用集合中提供的方法在集合中插人、删除、修改和查询文档。

PyMongo的基本操作

由于PyMongo是第三方库,所以需要安装之后才能在Python中使用。在Windows系统下安装可使用pip命令:

pip install pymongo

安装完成之后,就可以使用PyMongo操作MongoDB 数据库。首先要在项目中导人PyMongo库的全部内容或者使用到的类,通常情况下采用如下方式引人:

from pymongo import *

导人PyMongo库之后,就可以使用该库进行与数据库相关的操作。下面就针对PyMongo库的基本操作一一进行介绍。

1.创建连接

开始使用PyMongo的第一步 是创建一个 MongoClient类的对象,用于连接MongoDB服务器。

可以通过MongoClient类的构造方法进行创建。该方法语法格式如下:

class pymongo.mongo_client.MongoClient(host='localhost', port=27017, document_class=dict, tz_aware=False, connect=True, **kwargs)

上述方法中包含的参数含义如下:

(1)host参数:表示主机名或IP地址。

(2)port参数:表示连接的端口号。

(3)document_class参数:从此客户端查询返回的文档默认使用此类。

(4)tz_aware参数:如果为True,则此MongoClient作为文档中的值返回的datetime实例,将会被时区所识别。

(5)connect参数:若为True(默认),则立即开始在后台连接到MongoDB,否则连接到第一个操作。

建立连接的示例如下:

client=MongoClient()

上述示例中没有传人任何参数,将建立连接到默认的主机(localhost)和端口(27017 )。

除此之外,可以显式地指定主机和使用端口。例如:

client=MongoClient ('localhost', 27017)

也可以使用MongoDB的URL路径形式传人参数。例如:

client=MongoClient('mongodb://localhost:27017')

2.访问数据库

只要已经建立了与Mongo服务器的连接,就可以直接访问任何数据库。访问数据库的方式比较简单,可以将其当作属性一样,使用点语法进行访问。例如:

db=client.pymongo_test

此外,还可以使用字典的形式进行访问。例如:

db=client['pymongo_test']

注意:如果指定的数据库已经存在,就直接访问这个数据库;如果指定的数据库不存在,就会自动创建一个数据库。

3.创建集合

创建集合的方式与创建数据库类似,通过数据库使用点语法的形式进行访问。其语法格式

如下:

数据库名称.集合名称

例如,访问db数据库中的student集合,示例代码如下:

column=db.student

4.插入文档

往集合中插人文档的方法主要有如下两个:

(1) insert_one()方法:插人一条文档对象。

(2) insert_many()方法:插人列表形式的多条文档对象。

插人一条文档的示例如下:

try:
	client=MongoClient(host='localhost', port=27017)
	db=client.mongo_insert
	collection=db.student
	result=collection.insert_one({'name':'zhangsan', 'age':20})
	print(result)
except Exception as error:
	print(error)

输出结果为:

<pymongo.results.InsertOneResult object at 0x0000000034CFF88>

插人多条文档的示例如下:

result=column.insert_many([{'name':'zhangsan', 'age': 20},
				{'name': 'lisi', 'age': 21},
				{'name': 'wangwu', 'age': 22}])

5.查询文档

用于查找文档的方法主要有如下几个:

(1)find one()方法:查找-条文档对象。

(2)find many0方法:查找多条文档对象。

(3)find0方法:查找所有文档对象。

下面以find0方法为例,介绍如何查询集合中的所有文档。具体如下:

try:
	client=MongoClient()
	db=client.mongo_insert
	collection=db.student
	result=collection.find({'age': 20})
	print(result)
	for doc in result:
		print(doc)
except Exception as error:
	print(error)

输出结果为:

<pymongo.cursor.Cursor object at 0x00000000038F89B0>
{'_id': objectId('59f420f386d7080f1824d8c1'), 'name':'zhangsan', 'age': 20}

6.更新文档

用于更新文档的方法主要有如下几个:

(1) update_one()方法:更新一条文档对象。

(2) update_many()方法:更新多条文档对象。

更新一条文档的示例如下:

collection.update_one({'age': 22},{'$set': {'name': 'zhaoliu'}})

更新多条文档的示例如下:

collection.update_many({'age': 22}, {'$set': {'name': 'zhaoliu'}})

7.删除文档

用于删除文档的方法包括如下几个:

(1) delele_one()方法:删除一条文档对象。

(2) delete_many()方法:删除所有记录。

下面以delete_many()方法进行举例,介绍如何从集合中删除所有的文档。具体代码如下:

collection.delete_many({})

通过对上述操作的学习,熟练地掌握了数据库的增加、删除、查找、修改等基本操作之后,再去学习和提升就不会再有很大的障碍。实际上,使用PyMongo库操作数据库是非常简单的,以后如果遇到更加复杂的需求,在网络上查一下官 方文档或者技术博客,应该都能顺利解决。