ODM操作MongoDB

一、ODM的选择和安装1.1、MongoDB中的ODMMongoEngine使用最为广泛的ODMhttp://mongoengine.org/uMongo支持sync/async特性的ODMhttps://umongo.readthedocs.io/en/latest/1.2、MongoEngine的安装MongoDB版本支持情况:v3.4、v3.6、v4.0python版本支持情况:python3.6+安装:pip install mongoengine1.3、连接到M
摘要由CSDN通过智能技术生成

一、ODM的选择和安装

1.1、MongoDB中的ODM

MongoEngine

uMongo

1.2、MongoEngine的安装

  • MongoDB版本支持情况:v3.4、v3.6、v4.0
  • python版本支持情况:python3.6+
  • 安装:pip install mongoengine

1.3、连接到MongoDB

  • 方式一,使用默认配置:connect('students')

  • 方式二,指定主机地址和端口

    # 连接方式1
    connect('students', host='*', port=27017)
    # 连接方式2
    connect('students', host='mongodb://localhost/students')
    

连接到多个数据库

  • 建立连接
    connect(alias='db1', db='test')
    connect(alias='db2', db='test-temp')
    
  • 断开连接:disconnect(alias='db1')

二、MongoEngine模型介绍

2.1、ODM模型

示例代码

from mongoengine import Document

class User(Document):
	email = StringField(required=True)
	first_name = StringField(max_length=50)
	last_name = StringField(max_length=50)

2.2、常见数据类型

在这里插入图片描述

2.3、数据类型通用参数

  • db_field:文档中的field/域/列名称
  • required:是否为必填项
  • default:默认值
  • unique:唯一性约束
  • choices:可选择的列表
  • primary_key:是否为文档的主键,默认为False

2.4、类属性meta常见配置项

  • 类属性,其配置项为python的dict(字典)

  • 示例代码

    class User(Document):
    	username = StringField()
    	meta = {
         }
    

常见配置项

  • db_alias:指定文档所在的数据库(逻辑库)
  • collection:指定文档所在的集合
  • ordering:指定文档的默认排序规则
  • indexes:指定文档的索引规则

2.5、文档的嵌套模型

学生信息数据字典
在这里插入图片描述

文档的嵌套场景

  • 情况一,数组-简单数据类型:{'grades': [76, 51, 84]}

    模型解决方案

    from mongoengine import ListField, IntField, Document
    
    class Student(Document):
    	grades = ListField(IntField())
    
  • 情况二,数组-文档:{'grades': [{'score': 76}, {'score': 51}]}

    from mongoengine import Document, EmbeddedDocument, EmbeddedDocumentField,IntField,ListField
    
    # 自定义类型
    class CourseGrade(EmbeddedDocument):
    	score = IntField()
    
    class Student(Document):
    	grades = ListField(EmbeddedDocumentField(CourseGrade))
    
  • 情况三,单个文档:{'grade': {'course_name': '语文', 'score': 76}}

    from mongoengine import (
    	Document, EmbeddedDocument, EmbeddedDocumentField,
    	IntField, StringField
    )
    	
    	# 自定义类型
    	class CourseGrade(EmbeddedDocument):
    		course_name = StringField()
    		score = IntField()
    	
    	class Student(Document):
    		grades = EmbeddedDocumentField(CourseGrade)
    

示例

from enum import Enum

from mongoengine import (
	Document, connect, StringField,
	EnumField, IntField, EmbeddedDocument,
	EmbeddedDocumentField, ListField
)

# 连接到test数据库
connect('test', host='localhost', port=27017)


class SexEnum(Enum):
	MAN = '男'
	WOMEN = '女'


class CourseGrade(EmbeddedDocument):
	"""成绩信息(科目、老师、成绩)-被嵌套的文档"""
	course_name = StringField(max_length=64, required=True, verbose_name='科目')
	teacher = StringField(max_length=16, verbose_name='老师')
	score = IntField(min_value=0, max_value=150
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值