大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程的进阶版。
在之前《用Django全栈开发》系列专辑里面,皮爷详细的阐述了如何编写一个完整的网站,具体效果可以浏览线上网站:Peekpa.com
从进阶篇开始,每一篇文章都是干货满满。这一节,我们来讲述一下,在Django中,如何连接到MongoDB,并操作。
皮爷的每一篇文章,都配置相对应的代码。这篇文章的代码对应的Tag是“Advanced_01”。
前瞻回顾
在之前的《用Django全栈开发》系列里面的Peekpa.com
里面,我们使用的是MySQL数据库,具体的配置可以参考《用Django全栈开发——04. 连接MySQL数据库》那篇文章。
当时的配置主要是说要对peekpa/settings.py
文件中的DATABASES
变量就行修改即可。
那么今天,我们主要讲述的是如何让Django和我们的MongoDB数据库连接。
数据的准备
关于数据的准备,皮爷这里给大家准备好了一套测试数据。具体的测试数据内容,皮爷将会在之后的讲解中给大家展示。
数据的内容,皮爷这里使用的是:
https://www.mongodb.com/cloud
这里可以免费创建最大5GB存储容量的MongoDB数据库,并且交互存储。当然,如果你的需求很大,可以付费获取高级VIP会员服务,如下图。
好了,这里皮爷给大家准备的数据是我从日本气象厅的官网上面爬取的日本地震信息。
每一条数据都是以下结构:
{
"_id" : ObjectId("5f0110fc601bd5114812c0fd"),
"jp_create_time" : "2020-7-5-7-30-4",
"jp_url" : "http://www.jma.go.jp/jp/quake/20200704232923395-05082651.html",
"jp_title" : "2020年 7月 5日08時26分",
"jp_id" : "2020070423292339505082651",
"jp_time_num" : "2020-07-04-08-26-51",
"jp_location_image_url" : "http://www.jma.go.jp/jp/quake/images/japan/20200704232923395-05082651.png",
"jp_location" : "岐阜県飛騨地方",
"jp_level" : "M3.1",
"jp_max_level" : "震度1",
"jp_time_text" : " 7月 5日08時29分"
}
具体到MongoDB中的关键信息如下(之后会用到,所以先罗列出来):
- Database:PeekpaMongoData
- Collection:JpEarth
- User:peekpa-user
- Password: peekpa2020
如何连接MongDB Cloud中的Atlas,网站中给我出我们连接方式。针对不同的Python版本,连接的代码格式也不一样。
我们这里将要使用到的连接规则则是Python 3.6的:
mongodb+srv://peekpa-user:<password>@peekpa.ofyco.mongodb.net/<dbname>?retryWrites=true&w=majority
可以看到,上面需要被替换的尖括号里的内容,就是之前罗列的基本信息。
Python连接MongoDB
一般而言,使用Python连接MongoDB数据库的话,市面上主要有两种方法:
- 第一种是使用PyMongo;
- 第二种是使用MongoEngine。
这里我们主要使用PyMongo。因为mongoengine实在是太难用了。接下来给大家一个小片段代码,来展示一下PyMongo是如何连接数据的。
PyMongo
PyMongo目前最新的版本是3.4.0版本(2020年7月5日),官网地址是:https://api.mongodb.com/python/3.4.0/
使用pip安装pymongo:
$ pip install pymongo
官网里面有详细的使用方法和API说明。感兴趣的同学可以自己去看一看。
我们将之前连接Atlas的连接扩充一下,补充一个程序,显示数据库中前5条数据:
import ssl
import pymongo
if __name__ == '__main__':
client = pymongo.MongoClient(
"mongodb+srv://peekpa-user:peekpa2020@peekpa.ofyco.mongodb.net/Peekpa?retryWrites=true&w=majority",
ssl_cert_reqs=ssl.CERT_NONE)
db = client['PeekpaMongoData']
collection