一 点睛
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。
二 安装
(venv) E:\WebSpider>pip install pymongo
三 连接MongoDB
import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
# client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
client = pymongo.MongoClient('mongodb://localhost:27017/')
四 指定数据库
1 点睛
MongoDB中可以建立多个数据库,接下来我们需要指定操作哪个数据库。这里我们以test数据库为例来说明。
2 代码
import pymongo
client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
五 指定集合
1 点睛
MongoDB的每个数据库又包含许多集合(collection),它们类似于关系型数据库中的表。
下一步需要指定要操作的集合,这里指定一个集合名称为students。
2 代码
import pymongo
client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students
# 指定集合的第二种方法
#collection = db['students']
六 插入数据
1 插入单条数据
1.1 代码
import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
#client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students
# 指定集合的第二种方法
#collection = db['students']
# 定了学生的学号、姓名、年龄和性别。
student = {
'id': '20170101',
'name': 'Jordan',
'age': 20,
'gender': 'male'
}
# 直接调用collection的insert()方法即可插入数据
result = collection.insert(student)
print(result)
1.2 结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/5_3_1.py
5c3b33f518db4d08e1247e94
1.3 说明
在MongoDB中,每条数据其实都有一个_id属性来唯一标识。如果没有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性。insert()方法会在执行后返回_id值。
2 插入多条数据
2.1 代码
import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
#client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students
student1 = {
'id': '20170101',
'name': 'Jordan',
'age': 20,
'gender': 'male'
}
student2 = {
'id': '20170202',
'name': 'Mike',
'age': 21,
'gender': 'male'
}
result = collection.insert([student1, student2])
print(result)
2.2 结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/5_3_1.py
[ObjectId('5c3b34d318db4d4d29a26f17'), ObjectId('5c3b34d318db4d4d29a26f18')]
3 insert_one()方法
3.1 点睛
在PyMongo 3.x版本中,官方已经不推荐使用insert()方法了。当然,继续使用也没有什么问题。官方推荐使用insert_one()和insert_many()方法来分别插入单条记录和多条记录。
3.2 代码
import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
#client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students
student = {
'id': '20170101',
'name': 'Jordan',
'age': 20,
'gender': 'male'
}
result = collection.insert_one(student)
print(result)
print(result.inserted_id)
3.3 结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/5_3_1.py
<pymongo.results.InsertOneResult object at 0x0000018C8D03C548>
5c3b359518db4d3e7573a631
3.4 说明
与insert()方法不同,这次返回的是InsertOneResult对象,我们可以调用其inserted_id属性获取_id。
4 insert_many()方法
4.1 点睛
对于insert_many()方法,我们可以将数据以列表形式传递。
4.2 代码
import pymongo
# 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host,
# 第二个参数为端口port(如果不给它传递参数,默认是27017)
client = pymongo.MongoClient(host='localhost', port=27017)
# MongoClient的第一个参数host还可以直接传入MongoDB的连接字符串,它以mongodb开头
#client = pymongo.MongoClient('mongodb://localhost:27017/')
# client的test属性即可返回test数据库。
db = client.test
# 指定数据库的第二种方法
# db = client['test']
# 指定集合的第一种方法
collection = db.students
student1 = {
'id': '20170101',
'name': 'Jordan',
'age': 20,
'gender': 'male'
}
student2 = {
'id': '20170202',
'name': 'Mike',
'age': 21,
'gender': 'male'
}
result = collection.insert_many([student1, student2])
print(result)
print(result.inserted_ids)
4.3 结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/5_3_1.py
<pymongo.results.InsertManyResult object at 0x000001FC87EB8708>
[ObjectId('5c3b365618db4de700deaaf4'), ObjectId('5c3b365618db4de700deaaf5')]
4.4 说明
该方法返回的类型是InsertManyResult,调用inserted_ids属性可以获取插入数据的_id列表。