PyMongo简易上手指南
1. 简介¶
PyMongo就是Python操作MongoDB的一个库,而MongoDB,这里已经详细说明了。
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。
2. 安装¶
参考:https://cuiqingcai.com/5205.html
MongoDB的安装过程是很简单的,主要是需要配置一下(这里的路径按照个人的安装路径来):
- 首先要在MongoDB的data文件夹里新建一个db文件夹和一个log文件夹
- 然后在log文件夹下新建一个mongo.log
- 然后将
E:\MongoDB\bin
添加到环境变量path中,此时打开cmd窗口运行一下mongo命令,出现报错,这个不用管 - 执行
mongod --dbpath E:\MongoDB\data\db
- 需要注意的是:如果你没有提前创建db文件夹,是无法启动成功的。运行成功之后,我们打开浏览器,输入127.0.0.1:27017,看到如下图,就说明MongoDB服务已经成功启动了。
It looks like you are trying to access MongoDB over HTTP on the native driver port.
3. 连接¶
连接MongoDB时,我们需要使用PyMongo库里面的MongoClient。一般来说,我们只需要向其 传入MongoDB的IP及端口即可,其中第一个参数为地址host,第二个参数为端口port (如果不给 它传递参数,则默认是27017) :
import pymongo client = pymongo.MongoClient(host='localhost',port=27017)
或者写成
client = MongoClient('mongodb://localhost:27017/')
4. 指定数据库¶
MongoDB 中可以建立多个数据库,接下来我们需要指定操作其中一个数据库。这里我们以 test 数据库作为下一步需要在程序中指定使用的例子:
# 方法一 db = client.test # 方法二 db = client['test']
5. 指定集合¶
MongoDB的每个数据库又包含许多集合(collection),它们类似于关系型数据库中的表。下一步需要指定要操作的集合,这里我们指定一个名称为students的集合。与指定数据库类似,指定集合也有两种方式:
# 方法一 collection = db.students # 方法二 collection = db['students']
6. 插入数据¶
接下来,便可以插入数据了。我们对 students 这个集合新建一条学生数据,这条数据以字典形式表示:
student = { 'id' : '10001', 'name' : 'xiaowang', 'age' : '20' }
新建的这条数据里指定了学生的学号、姓名、年龄和性别。接下来,我们直接调用 collection 的 insert 方法即可插入数据,代码如下:
result = collection.insert(student) print(result)
在MongoDB中,每条数据其实都有一个 id 属性来唯一标识。如果没有显式指明该属性,MongoDB会自动产生一个Objectld类型的 id 属性。insert() 方法会在执行后返回 id 值。
运行结果如下:5932a68615c2606814c91f3d
当然,我们也可以同时插入多条数据,只需要以列表形式传递即可,示例如下:
result = collection.insert([student,teacher])
实际上,在PyMongo中,官方已经不推荐使用insert方法了。但是如果你要继续使用也没有什么问题。目前,官方推荐使用insert_one和insert_many方法来分别插入单条记录:
result = collection.insert_one(student)
对于多条数据
result = collection.insert_many([student,teacher])
7. 查询¶
插入数据后,我们可以利用 find_one 或 find 方法进行查询,其中 find_one 查询得到的是单个结果,find 则返回一个生成器对象。示例如下:
result = collection.find_one({ 'name': 'xiaowang'}) print(result )
对于多条数据
results = collection.find({'age': 20}) for result in results : print( result )
8. 删除¶
删除操作比较简单,直接调用 remove 方法指定删除的条件即可,此时符合条件的所有数据均会被删除。
另外,这里依然存在两个新的推荐方法 —— delete_one 和 delete_many,示例如下
# 删一个 result = collection.delete_one ({ 'name': 'xiaowang'}) # 删多个 result = collection.delete_many ({ 'age': {'$lt':25}})