一、 在django中配置mongodb
1、修改配置文件settings .py
找到settings.py中的DATABASE字段如下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'localhost',
'PORT': '3306',
},
'mongotest': {
'ENGINE': None,
}
}
import mongoengine
# 连接mongodb中数据库
conn = mongoengine.connect("test")
上述配置是同事配置了mysql与mongodb,通过第三方库 mongoengine提供与mongodb的连接
2、编写models.py配置mongodb中的collection
接下来定义models.py中的模型,写入我们的数据库。 这里我定义了6个字段,四个为字符串类型,一个为布尔类型,一个为字典类型。
from django.db import models
import mongoengine
# Create your models here.
class UserModel(mongoengine.Document):
username = mongoengine.StringField(max_length=16)
password= mongoengine.StringField(max_length=16)
phone= mongoengine.StringField(max_length=16)
email= mongoengine.StringField(max_length=16)
authority=mongoengine.BooleanField(default=False)#会员权限
dataset=mongoengine.DictField()
这里说一下字典类型datset。顾名思义,这是用来存放用户上传的数据集的,因此需要通过一个嵌套的字典进行存储。建立数据集名称-数据集
的key-value结构,value的数据集也需要通过一个字典进行保存。
3、在django中对mongodb的数据进行增删改查
接下来写一个增删改查的示例
import pandas as pd
df=pd.read_csv("Datasets/hour.csv")
#将pandas读取的dataframe转换为字典
data = {i: df[i].tolist() for i in df.columns}
#如果没有数据集,也可以用以下内容作为插入
#data={"Mon":1;"Tue":2;"Wed":3}
#新增数据
UserModel.objects.create(
username='admin',
password='admin',
phone='123456',
email='123456',
authority=True,
dataset={"hour":data}
)
#查询数据
user=UserModel.objects.filter(username=username)
#更新数据
UserModel.objects.filter(username=username).update(password='123',phone='456')
#删除数据
UserModel.objects.filter(username=username).delete()
二、使用pymongo 进行数据的增删改查
1、基本的增删改查
个人觉得在django中,使用pymongo进行增删改查的操作会相对而言有更好的体验
导入pymongo并选择要操作的集合 数据库和集合也会自动创建
from pymongo import MongoClient
host='localhost'
port='27017'
client = MongoClient(host,port)
collection = client['db名']['集合名']
- 添加一条数据
add = collection.insert_one({"name":"test10010","age":33})
- 添加多条数据
item_list = [{"name":"test1000{}".format(i)} for i in range(10)]
#insert_many接收一个列表,列表中为所有需要插入的字典
t = collection.insert_many(item_list)
- 查找一条数据
#find_one查找并且返回一个结果,接收一个字典形式的条件
t = collection.find_one({"name":"test10005"})
- 查找全部数据 结果返回一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,但是只能够进行一次读取
#find返回所有满足条件的结果,如果条件为空,则返回数据库的所有
t = collection.find({"name":"test10005"})
#结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,
for i in t:
print(i)
for i in t: #此时t中没有内容
print(i)
- 更新以及删除数据 更新数据时 注意使用$set命令
#update_one更新一条数据
collection.update_one({"name":"test10005"},{"$set":{"name":"new_test10005"}})
#update_all更新全部数据
collection.update_many({"name":"test10005"},{"$set":{"name":"new_test10005"}})
#delete_one删除一条数据
collection.delete_one({"name":"test10010"})
#delete_may删除所有满足条件的数据
collection.delete_many({"name":"test10010"})
2、对嵌套文档的增删改查
参考连接: blog.csdn.net/frightingfo…
我们在一开始增加数据的时候有定义一个DictField字段,那么如果我们要对这个嵌套文档进行增删改查呢。这里要用到几个修改器:$push,$pop,$pull
。
关于这个字段,要注意的是auther需要是一个数组,否则在进行push操作时会出现报错.
首先增加一个name:
db.myFirstCollection.update({_id:1},{"$push":{"auther":{"name":1}}})
删除最后一个值,若要删除第一个值则为-1
db.myFirstCollection.update({_id:1},{"$pop":{"auther":1}})
删除指定值
db.myFirstCollection.update({_id:1},{"$pull":{"auther":{"name":1}}})
如果要给auther中第一个值加一个age字段
db.myFirstCollection.update({"_id" :1},{"$set":{"auther.0.age":22}})
三、更多
更多实际内容以及代码示例可以关注以下公众号。