Django用mongoengine操作mongodb
最近在写Django项目,使用的是mongodb,虽然Django不支持NoSQL,但是mongoengine可以帮助我们像ORM一样在Django项目中去操作mongodb
推荐一个可视化工具 Robo 3T
这里贴几个我觉得比较有帮助的帖子,特别是在一对一,一对多的引用
先放mongoengine的官方文档
http://docs.mongoengine.org/tutorial.html
这是翻译的中文文档,版本比较老,对应官方文档看
https://www.cnblogs.com/fillim/p/4864523.html
https://blog.csdn.net/qq_38890497/article/details/80392846
https://www.linuxzen.com/mongoengineshi-yong-bi-ji.html
1. 首先修改settings.py, 原来DATABASES完全不用去管它了, 全部设为空串就好, 然后在文件里加上下面的内容
如有必要可在INSTALLED_APPS中注册一下
#settings.py from mongoengine import connect
connect('DB_NAME')
#####ReferenceField 引用字段
class Org(Document):
owner = ReferenceField('User') class User(Document):
org = ReferenceField('Org', reverse_delete_rule=CASCADE) User.register_delete_rule(Org, 'owner', DENY)
2.创建集合
# model.py from mongoengine import *
from datetime import datetime,timedeltaclass User(Document):
name = StringField(max_length=32)
age = IntField()
password = StringField(max_length=32
引用查询
from mongoengine import *
from datetime import datetime,timedelta
from ReferencenField import *
import json
from bson import json_util connect('mongotest') # 一对一引用查询
author = User.objects.filter(name="John Smith")[0]
author2 = Page.objects.filter(content="test3 Page").first().author content = Page.objects.filter(author=a)
content_ = Page.objects(author__in=[a]) print(author.name)
print(author2.name) print(content_) for i in content:
print(i.author.name,':',i.content) # 一对多引用查询
John_Smith = User.objects.filter(name="John Smith")[0]
llz = User.objects.filter(name='lilinze')[0]
# print(llz.name) print('查询作者是llz的Page')
pages = Page.objects.filter(author=llz)
for i in pages :
print(i.content) print('查询作者是John_Smith的Page')
pages = Page.objects.filter(author=John_Smith)
for i in pages:
print(i.content)
嵌入
from mongoengine import *
from datetime import datetime,timedelta
from bson.objectid import ObjectId connect('mongotest') class User(Document):
name = StringField()
pages= StringField()
time = DateTimeField() class Tags(EmbeddedDocument):
name = StringField()
date = DateTimeField(default=datetime.now()) class Page(Document):
content = StringField()
quadrant =StringField()
#两种嵌入写法
# tags = ListField(EmbeddedDocumentField('Tags'))
tags = EmbeddedDocumentListField('Tags')
author = ReferenceField(User,reverse_delete_rule = CASCADE) user = User.objects.get(name='llz')
tag = Tags(name='123')
tag1 = Tags(name='456')
page = Page(content='嵌入1',quadrant='北面',tags=[tag,tag1],author=user)
page.save()
Objectid转为字符串
John = User.objects.filter(name="John Smith")[0].id
print(John)
dict = {'John':John}
print('dict:',dict)
# j_son = json.dumps(dict) print('--------ObjectId转为Json----------')
data = json_util.dumps(John)
print('data:',data)
print('type:',type(data)) print('--------Json--to--dict----------')
print('********************************')
dd = json.loads(data)
print(dd)
print(type(dd))
print(dd['$oid'])
print(type(dd['$oid']))
dd_ = {'$oid':dd['$oid']}
jdd_ = json.dumps(dd_)
objecdd_ = json_util.loads(jdd_)
print(objecdd_)
print(type(objecdd_))
print('********************************') print('--------Json--to--ObjectId----------')
ObjectId = json_util.loads(data)
print(ObjectId)
print(type(ObjectId))
字符串转objectID
from bson.objectid import ObjectId
a = '5bfe034c07aae823b440fdcf'
# 判断是否符合object格式
if ObjectId.is_valid(a):
A = ObjectId(a)
print(A)
# <class 'bson.objectid.ObjectId'>,id是bson
print(isinstance(A,ObjectId)) # True
create() ,存入一个新对象,并返回
llzid = User.objects.create(name='zzz')
print(llzid.name) >>>zzz
Django用mongoengine操作mongodb的更多相关文章
- Django 通过 mongoengine 连接 MongoDB 进而使用orm进行CRUD
一. 在python脚本中, 我们通常可以使用pymongo模块实现与mongodb数据库的交互, 但是在使用Django框架进行定制开发的web server 项目中, 仍然使用pymongo模块的 ...
- python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用
python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...
- python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战
python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...
- mongoose - 让node.js高效操作mongodb
Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...
- Django之Model操作
Django之Model操作 本节内容 字段 字段参数 元信息 多表关系及参数 ORM操作 1. 字段 字段列表 AutoField(Field) - int自增列,必须填入参数 primary_ke ...
- 【MongoDB for Java】Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...
- PHP操作MongoDB学习笔记
<?php/*** PHP操作MongoDB学习笔记*///*************************//** 连接MongoDB数据库 **////*************** ...
- PHP操作Mongodb之增删改查篇
之前,我讲解过PHP中mongodb扩展的安装,及启动,链接操作[忘记了?去看看吧!PHP操作Mongodb之一].本文主要就是讲在PHP中Mongodb的增加,查询,修改及删除数据的操作. 1.增加 ...
- PHP操作Mongodb之高级查询篇
本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作. 在PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加.删除.修改及查询数据的操作.本文主要是将查询时用到的高 ...
随机推荐
- CobaltStrike逆向学习系列(3):Beacon C2Profile 解析
这是[信安成长计划]的第 3 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Controller 端分析 0x02 Beacon 端分析 0x03 展示图 在上一篇文章中完成了 S ...
- 让你的Linux像黑客帝国的画面一样炫酷
#sudo apt-add-repository ppa:hollywood/ppa #sudo apt-get install hollywood #sudo apt-get install ...
- Java中的Unsafe在安全领域的一些应用总结和复现
目录 0 前言 1 基本使用 1.1 内存级别修改值 1.2 创建对象 1.3 创建VM Anonymous Class 2 利用姿势 2.1 修改值以关闭RASP等防御措施 2.2 创建Native ...
- WPF使用MVVM(三)-事件转命令
WPF使用MVVM(三)-事件转命令 上一节介绍了WPF中的命令,可是仅仅介绍的是WPF框架给我们提供的点击命令,也就是用Command属性来绑定一个命令,用来响应按钮的点击行为!显然这是不够的,界面 ...
- Spring AOP之3w的配置
1.3w是什么? ■ what.where.when 或者 what.when.where 2.what.where.when[通用] (1)what:增强器-bean[配置一个bean对象] (2) ...
- LGP4841题解
无向联通图计数板子 首先,这个太难了,先让我们来求一个简单的: 无向图计数. 一共 \(\frac {n \times (n+1)} 2\) 条可能存在的边,枚举一条边是否存在,就有 \(2^{\fr ...
- dotnet 委托的实现解析
缘起 最近被问到什么是.Net中的委托.问题虽然简单却无从回答.只能说委托是托管世界的函数指针,这么说没啥大毛病,但也都是毛病(当时自己也知道这么说不太对,不过自己不太爱用这个也没准备确实没有更好的答 ...
- 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令
目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...
- 4月12日 python学习总结 继承和派生
一.继承 什么是继承: 继承是一种新建类的方式,在python中支持一个子类继承多个父类 新建类称为子类或派生类 父类可以称之为基类或者超类 子类会遗传父类的属性 2. 为什么继承 ...
- MySQL知识补充(表字段操作、视图、触发器、事物、存储过程、内置函数、流程控制、索引、慢查询)
今日内容概要 表字段操作补充(掌握) 视图(了解) 触发器(了解) 事务(掌握) 存储过程(了解) 内置函数(了解) 流程控制(了解) 索引(熟悉) 内容详细 1.表字段操作补充 # 1.添加表字段 ...