Python 是目前比较流行的程序设计语言,特别是在人工智能和大数据分析处理上,市场空间是比较大的。与此同时,MongoDB 是比较流行的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 类的对象,与MongoDB服务器建立连接。
(2)通过MongoClient对象访问数据库(DataBase对象)。
(3)使用上个步骤的数据库创建一个集合(Collection对象)。
(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参数:表示主机名或I地址。
(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_one0方法:插入一条文档对象。
(2)insert_many0方法:插入列表形式的多条文档对象。
插入一条文档的示例如下:
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 0x00000000034CFF88>
插入多条文档的示例如下:
result=column.insert_many([{'name':'zhangsan','age':20},
{'name': 'lisi','age':21},
{'name': 'wangwu','age': 22}])
5.查询文档
用于查找文档的方法主要有如下几个:
(1) find_one0方法:查找一条文档对象。
(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_one0方法:更新一条文档对象。
(2)update_many0方法:更新多条文档对象。
更新一条文档的示例如下:
collection.update_one({'age':22},{'$set':{'name': 'zhaoliu'}})
更新多条文档的示例如下:
collection.update_many({'age':22}),{'$set':{'name':'zhaoliu'}})
7.删除文档
用于删除文档的方法包括如下几个:
(1) delete_one0方法:删除一条文档对象。
(2) delete_manyO方法:删除所有记录。
下面以 delete_many0方法进行举例,介绍如何从集合中删除所有的文档。具体代码如下:
collection.delete_many({})
通过对上述操作的学习,熟练地掌握了数据库的增加、删除、查找、修改等基本操作之后,再去学习和提升就不会再有很大的障碍。实际上使用 PyMongo 库操作数据库是非常简单的,以后如果遇到更加复杂的需求需求,在网络上查一下官方文档或者技术博客,应该都能顺利解决。
参考解析Python网络爬虫:核心技术、Scrapy 框架、分布式爬虫
黑马程序员 编著
仅提供学习行为,无任何商业行为。