Python 数据持久化 - PyMongo 模块


MongoDB 是一个面向文档的NoSQL数据库。它是一个在服务器端公共许可证下分发的跨平台数据库。它使用类似 JSON 的文档作为模式。

为了提供存储海量数据的能力,多个物理服务器(称为分片)互连,从而实现水平可扩展性。MongoDB 数据库由文档组成。

MongoDB

文档类似于关系数据库表中的一行。但是,它没有特定的架构。文档是键值对的集合——类似于字典。但是,每个文档中的 kv 对数量可能会有所不同。就像关系数据库中的表有一个主键一样,MongoDB 数据库中的文档有一个名为“_id”的特殊键。

在了解如何使用 Python 来使用 MongoDB 数据库之前,让我们先简单了解一下如何安装和启动 MongoDB。MongoDB 的社区版和商业版现已推出。社区版本可以从www.mongodb.com/download-center/community下载。

假设 MongoDB 安装在 c:\mongodb 中,可以使用以下命令调用服务器。

c:\mongodb\bin>mongod

默认情况下,MongoDB 服务器在端口号 22017 上处于活动状态。数据库默认存储在 data/bin 文件夹中,但可以通过 –dbpath 选项更改位置。

MongoDB 有自己的一组可在 MongoDB shell 中使用的命令。要调用 shell,请使用Mongo命令。

x:\mongodb\bin>mongo

类似于 MySQL 或 SQLite shell 提示符的 shell 提示符出现在该提示符之前,可以执行本机 NoSQL 命令。然而,我们对将 MongoDB 数据库连接到 Python 感兴趣。

PyMongo模块由 MongoDB Inc 自行开发,提供 Python 编程接口。使用众所周知的 pip 实用程序来安装 PyMongo。

pip3 install pymongo

假设 MongoDB 服务器已启动并正在运行(使用mongod命令)并且正在侦听端口 22017,我们首先需要声明一个MongoClient对象。它控制Py​​thon会话和数据库之间的所有事务。

from pymongo import MongoClient
client=MongoClient()

使用此客户端对象与 MongoDB 服务器建立连接。

client = MongoClient('localhost', 27017)

使用以下命令创建一个新数据库。

db=client.newdb

MongoDB 数据库可以有很多集合,类似于关系数据库中的表。Collection 对象是通过Create_collection()函数创建的。

db.create_collection('students')

现在,我们可以在集合中添加一个或多个文档,如下所示 -

from pymongo import MongoClient
client=MongoClient()
db=client.newdb
db.create_collection("students")
student=db['students']
studentlist=[{'studentID':1,'Name':'Juhi','age':20, 'marks'=100},
{'studentID':2,'Name':'dilip','age':20, 'marks'=110},
{'studentID':3,'Name':'jeevan','age':24, 'marks'=145}]
student.insert_many(studentlist)
client.close()

要检索文档(类似于 SELECT 查询),我们应该使用find()方法。它返回一个游标,借助该游标可以获得所有文档。

students=db['students']
docs=students.find()
for doc in docs:
   print (doc['Name'], doc['age'], doc['marks'] )

要查找特定文档而不是集合中的所有文档,我们需要将过滤器应用于 find() 方法。过滤器使用逻辑运算符。MongoDB 有自己的一组逻辑运算符,如下所示 -

先生编号 MongoDB 运算符 & 传统逻辑运算符
1

$当量

等于 (==)

2

$gt

大于 (>)

3

$gte

大于或等于 (>=)

4

美元

如果等于数组中的任何值

5

$lt

小于 (<)

6

$LTE

小于或等于 (<=)

7

$ne

不等于 (!=)

8

$nin

如果不等于数组中的任何值

例如,我们有兴趣获取 21 岁以上学生的名单。在find()方法的过滤器中使用 $gt 运算符,如下所示 -

students=db['students']
docs=students.find({'age':{'$gt':21}})
for doc in docs:
   print (doc.get('Name'), doc.get('age'), doc.get('marks'))

PyMongo 模块提供update_one()update_many()方法,用于修改满足特定过滤器表达式的一个或多个文档。

让我们更新名称为 Juhi 的文档的标记属性。

from pymongo import MongoClient
client=MongoClient()
db=client.newdb
doc=db.students.find_one({'Name': 'Juhi'})
db['students'].update_one({'Name': 'Juhi'},{"$set":{'marks':150}})
client.close()