Django连接MongoDB数据库
Django使用MongoDB数据库的优点
数据量大时,mongodb的检索效率比mysql更高
保存数据时,mongodb不会因为缺少某一项信息而报错,但是mysql会报错(除非手动设置这一项在数据库中可以为空)
条件准备
- 电脑上安装有 MongoDB 数据库
- 安装python的一个第三方库 mongoengine
安装mongoengine
pip install mongoengine
Django连接MongoDB,和连接myslq的不同之处有两点
- settings.py 中的数据库配置
- models.py 中的类
配置连接MongoDB数据库
修改settings.py文件
django连接mongodb数据库,只需指定一个数据库的名字即可
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
# 默认的sqlite3 不用删除
'mongodb':{
# db_book 是MOngoDB数据库的名字
'NAME':'db_book'
}
}
db_book 是MongoDB的一个数据库名字,该数据库需要事先手动创建
再看一张连接mysql的settings.py 文件中关于数据库部分的图片
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'chaochao',
'USER': 'root',
'PASSWORD': 'chaochao666',
'HOST': '',
'PORT': '',
}
}
编辑models.py 文件
import mongoengine
from book.settings import DATABASES
from datetime import datetime
# 使用connect()方法链接MongoDB
# NAME 会自动映射为 settings.py 中的数据库名
mongoengine.connect(DATABASES['mongodb']['NAME'])
# Create your models here.
# 此处继承的是 mongoengine.Document
class book(mongoengine.Document):
isbn = mongoengine.StringField() # 编号
name = mongoengine.StringField() # 书名
author = mongoengine.StringField() # 作者
press = mongoengine.StringField() # 出版社
date = mongoengine.DateTimeField(default=datetime.now(), required=True) # 出版时间
kind = mongoengine.StringField() # 分类
再来看一下连接 mysql 时的 models.py 文件
from django.db import models
# Create your models here.
class Person(models.Model):
# 姓名 str类型
name = models.CharField(max_length=20,verbose_name='姓名')
# 年龄 int型
age=models.IntegerField(verbose_name='年龄')
# 成绩 float类型
score = models.FloatField(verbose_name='成绩')
当我们在后台管理中添加一个数据后,打开MongoDB,可以看到数据已经添加成功
book 是 models.py 中设置的类名,默认使用类名作为MongoDB中的集合名