【笔记】Django项目中连接MongoDB

前言

Django项目中连接MongoDB学习笔记

下载依赖

1
pip3 install pymongo

修改全局配置

  • 在全局配置中的DATABASES配置后添加MongoClient配置
<project_name>/<project_name>/settings.py
1
2
3
4
5
6
from pymongo import MongoClient

MONGOCLIENT = MongoClient(
host='127.0.0.1',
port='27017'
)

MongoDB客户端

封装MongoDB客户端

  • 在子应用根目录下创建mongo_models.py配置文件

<dbname>:指定连接的数据库名
<collection_name>:指定需要操作的集合名

<project_name>/<app_name>/mongo_models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from django.conf import settings

connect = settings.MONGOCLIENT['<dbname>']
class User(object):
db = connect['<collection_name>']

@classmethod
def insert(cls, **params):
return cls.db.insert(params)

@classmethod
def get(cls, **params):
return cls.db.find_one(params)

@classmethod
def gets(cls, **params):
return cls.db.find(params)

@classmethod
def update(cls, _id, **params):
return cls.db.update({'_id', _id}, {'$set': params})

使用MongoDB客户端

1
2
3
from app.mongo_models import User

users = User.gets()

MongoDB表关联

下载依赖

1
pip3 install mongoengine

创建一个数据表映射

  • 在子应用根目录下创建mongo_engine.py配置文件

<dbname>:指定连接的数据库名

属性:

require:是否为空
max_length:字符串长度

<project_name>/<app_name>/mongo_engine.py
1
2
3
4
5
6
from mongoengine import connect, Document, StringField, IntField

connect('<dbname>', host='127.0.0.1', port='27017')
class User(Document):
id = IntField(require=False)
name = StringField(max_length=5)

多表关联

一对一

<project_name>/<app_name>/mongo_engine.py
1
2
3
4
5
6
7
8
9
10
11
from mongoengine import connect, Document, StringField, IntField, ReferenceField

connect('<dbname>', host='127.0.0.1', port='27017')
class User(Document):
id = IntField(require=False)
name = StringField(max_length=5)

一对一关联
class OneToOne(Document):
id = IntField(require=False)
user = Reference(User)

增删改查

引入模块

  • views.py中如果需要使用mongo_engine.py中的类,需要先引入模块
<project_name>/<app_name>/views.py
1
from .mongo_engine import User

新增数据

方法一:直接使用内置的方法

1
User.objects.create(字段名=字段值)

方法二:使用save()方法

1
2
user = User(字段名=字段值)
user.save()

完成

参考文献

哔哩哔哩——图灵学院教程