Python数据持久性 PyMongo模块

Python数据持久性 PyMongo模块

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

为了提供存储巨大数据的能力,多个物理服务器(称为分片)被相互连接,从而实现了横向扩展。MongoDB数据库由文档组成。

Python数据持久性--PyMongo模块

文档类似于关系数据库表中的一行。然而,它并没有一个特定的模式。文档是一个键值对的集合–类似于字典。然而,每个文档中的K-V对的数量可能不同。就像关系型数据库中的表有一个主键一样,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提示符出现在面前,可以执行本地NoSQL命令。然而,我们对连接MongoDB数据库和Python感兴趣。

PyMongo 模块是由MongoDB公司自己开发的,提供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有自己的一套逻辑运算符,如下所示

序号 MongoDB操作符和传统的逻辑操作符
1 $eq 等于(==)
2 $gt 大于 (>)
3 $gte 大于或等于 (>=)
4 $in 如果等于数组中的任何值
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()

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程