Python Data Persistence 简明教程

Python Data Persistence - PyMongo module

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

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

mongodb

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

在了解如何将 MongoDB 数据库与 Python 一起使用之前,让我们简要了解如何安装和启动 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 对象。它控制 Python 会话和数据库之间的所有事务。

from pymongo import MongoClient
client=MongoClient()

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

client = MongoClient('localhost', 27017)

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

db=client.newdb

MongoDB 数据库可以有许多集合,类似于关系数据库中的表。集合对象由 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 有一套自己的逻辑运算符,如下所示 −

Sr.No

MongoDB 运算符 & 传统逻辑运算符

1

$eq equal to (==)

2

$gt greater than (>)

3

$gte 大于或等于 (>=)

4

$in 如果等于数组中的任何值

5

$lt less than (<)

6

$lte 小于或等于 (⇐)

7

$ne not equal to (!=)

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 的文档的 marks 属性。

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()