PyMongo简易上手指南

1. 简介

PyMongo就是Python操作MongoDB的一个库,而MongoDB,这里已经详细说明了。

MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。

2. 安装

参考:https://cuiqingcai.com/5205.html

MongoDB的安装过程是很简单的,主要是需要配置一下(这里的路径按照个人的安装路径来):

  1. 首先要在MongoDB的data文件夹里新建一个db文件夹和一个log文件夹
  2. 然后在log文件夹下新建一个mongo.log
  3. 然后将E:\MongoDB\bin添加到环境变量path中,此时打开cmd窗口运行一下mongo命令,出现报错,这个不用管
  4. 执行 mongod --dbpath E:\MongoDB\data\db
  5. 需要注意的是:如果你没有提前创建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}})