Python 操作 MongoDB 数据库(上)

2019-11-07 16:11:27 浏览数 (1)

本文字数:2871 字 阅读本文大概需要:8 分钟

写在之前

在之前我用了 3 篇文章的篇幅来介绍了用 Python 操作 MySQL 数据库,今天呢,我们再来介绍另一种可以用 Python 操作的数据库 MongoDB。

MongoDB 也是当下比较火的数据库之一,因为时代的发展需要 NoSQL,还是老办法,在本篇文章中呢,我先来介绍一下 MongoDB 数据库的安装运行和使用,以及用 Python 连接 MongoDB,下面就开始今天的学习。

MongoDB 简介

在这之前,我们先来了解一下什么是 NoSQL:

NoSQL 也就是 Not only SQL,指的是非关系型数据库,它是为了大规模 Web 应用而生的,它的特征诸如模式自由、支持简易复制、简单的 API、大容量数据等。

MongoDB 是 NoSQL 中的一种,选择它的原因是它具有如下特点:

  • 面向文档存储。
  • 对任何对象可索引。
  • 复制和高可用性。
  • 自动分片。
  • 丰富的查询。
  • 快速就地更新。

基于 MongoDB 的特点,它擅长的领域如下:

  • 大数据。
  • 内容管理和交付。
  • 移动和社交基础设施。
  • 数据平台。

如果大家感兴趣的话,也可以去学习其它的 NoSQL 数据库。

安装 MongoDB

这个和 MySQL 一样,你要使用它,首先就要安装。因为篇幅有限且每个人的操作系统都不一样,具体怎么安装,我不在这赘述,网上的教程很多,随便 Google 一下就是一大堆。

启动 MongoDB

安装完毕后就可以启动数据库。我在这里建立一个简单的库,并且捎带说明 MongoDB 的基本要点,目的在于为后面用 Python 来操作它做铺垫。在这我以 windows 为例,首先进入到 MongoDB 的交互模式下:

上图我截取了一部分,在 windows 的 cmd 中,进入到你安装 MongoDB 的目录下的 bin 文件夹中,运行 mongo.exe 进入到 MongoDB 交互模式。进入之后有点类似 MySQL 的状态。

在 MongoDB 中,有一个全局变量 db,使用哪个数据库,哪个数据库就会作为对象被赋值给这个全局变量 db。如果这个数据库不存在,就会被新建。

代码语言:javascript复制
> use mydb
switched to db mydb
> db
mydb
>

除非是向这个数据库中增加实质性的内容,否则它是看不到的。

代码语言:javascript复制
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

向这个数据库中增加一些东西,MongoDB 的基本单元是「文档」。所谓的「文档」就是类似于 Python 中的字典,以「键/值对」的方式保存数据。

代码语言:javascript复制
> book = {"title":"zero study python","author":"rocky","like":"python"}
{ "title" : "zero study python", "author" : "rocky", "like" : "python" }
> db.books.insert(book)
WriteResult({ "nInserted" : 1 })
> db.books.find()
{ "_id" : ObjectId("5bab28b6a1888724cb5ba515"), "title" : "zero study python", "
author" : "rocky", "like" : "python" }

db 指向了数据库 mydb,books 是这个数据库里面的一个集合(类似于 MySQL 中的表),向集合 books 里面插入了一个文档(文档对应 MySQL 里面的记录)。「数据库」、「集合」、「文档」构成了 MongoDB 数据库。

上面的操作有一个比较有意思的地方,并没有 create 之类的命令,用到数据库,就通过 use ***,如果不存在就建立;用到集合,就通过 db.*** 来使用,如果没有就建立。可以总结为“随用,随取,随建立”,简单的一批。

代码语言:javascript复制
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
mydb    0.000GB

当有了内容以后,就可以看到刚才用到的数据库 mydb 了。简单的使用就是这些,下面就来重头戏啦,毕竟我们是主学 Python 的啊。

安装 pymongo

要用 Python 来驱动 MongoDB,必须要安装驱动模块,即 pymongo,这个跟操作 MySQL 是类似的。安装方法推荐如下(windows 下):

代码语言:javascript复制
pip3 install pymongo

如果顺利就会看到最后的提示:

代码语言:javascript复制
Installing collected packages: pymongo
Successfully installed pymongo-3.7.1

然后我们来看一下安装的版本号:

代码语言:javascript复制
>>> import pymongo
>>> pymongo.version
'3.7.1'

上面 import pymongo 没有问题,证明一切都可以了。

Python 连接 MongoDB

既然 Python 驱动 MongoDB 的模块 pymongo 已安装完毕,那么接下来就是连接,即「建立连接对象」。

代码语言:javascript复制
>>> import pymongo
>>> pymongo.Connection('localhost',27017)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Connection'

竟然报错??怎么回事??明明很多书上都是这么写的,为啥会报错呢?一定要注意这里的坑!这个很版本有关系,我刚学的时候这里直接把我坑傻了。如何你用的是旧版本的 pymongo,比如 2.8 的,你仍然可以用上面的方法,但是你如果用的是新版本的,就得注意一下了,有时候不能盲目的相信书上的东西,因为会有些东西是会变的

代码语言:javascript复制
>>> dir(pymongo)

是时候请出我们的 dir 来了,看看哪些方法可用,因为结果太多我就不贴上来了,你可以自行在交互模式运行,运行的结果你会发现里面没有 Connection() 这个方法,但是发现有一个 MongoClient(),这是柳暗花明又一村。

代码语言:javascript复制
>>> client = pymongo.MongoClient('localhost',27017)

随着上面这行代码的运行,Python 已经和 MongoDB 建立了连接。刚才我们已经建立了一个数据库 mydb,并且在这个库里面有一个集合 books,于是:

代码语言:javascript复制
>>> mdb = client.mydb

或者是:

代码语言:javascript复制
>>> mdb = client['mydb']

上面的代码获得了数据库 mydb,并赋值给变量 mdb。

代码语言:javascript复制
>>> mdb.collection_names()
[u'books']

查看集合,发现了我们已经建立好的那个 books,于是再获取这个集合,并赋值给一个变量 books:

代码语言:javascript复制
>>> books = mdb["books"]

或者是:

代码语言:javascript复制
>>> books = mdb.books

接下来,我们就可以操作这个集合中的具体内容啦。

写在之后

上面的 books 所引用的是一个 MongoDB 的集合对象,它跟前面学习过的其它对象一样,也有一些方法供我们使用,我会在明天的文章中再详细的给大家说明,敬请期待。

如果你觉得本篇文章对你有帮助的话,欢迎点赞支持一下。

The end。

0 人点赞