一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

詳解python中mongoengine庫用法

目錄

一、MongoDB得安裝與連接

安裝:pip install mongoengine

連接mongodb數(shù)據(jù)庫

from pymongo import MongoClientcli = MongoClient('192.168.124.104', 27017)mongodb = cli['test']print(mongodb)
from mongoengine import connect#  連接到User數(shù)據(jù)庫connect('user', host='192.168.124.104', port=27017)

二、MongoEngine模型介紹

2.1、ODM模型介紹

from mongoengine import Document, StringFieldclass User(Document):    email = StringField(required=True)    first_name = StringField(max_length=50)    last_name = StringField(max_length=50)

2.2、常見數(shù)據(jù)類型

 2.3、數(shù)據(jù)類型通用參數(shù)

  • db_field:文檔中得field/域/列名稱
  • required:是否為必填項
  • default:默認值
  • unique:唯一性約束
  • choices:可選擇得列表
  • primary_key:是否為文檔得主鍵,默認為False

2.4、類屬性meta常見配置項

類屬性,其配置項為python得dict(字典)

from mongoengine import Document, StringFieldclass User(Document):    email = StringField(required=True)    first_name = StringField(max_length=50)    last_name = StringField(max_length=50)    meta = {    }

常見得配置項:

  • db_alias:指定文檔所在得數(shù)據(jù)庫(邏輯庫)
  • collection:指定文檔所在得集合
  • ordering:指定文檔得默認排序規(guī)則
  • indexes:指定文檔得索引規(guī)則

2.5、文檔得嵌套模型

學(xué)生信息數(shù)據(jù)字典

文檔得嵌套場景

情況一,數(shù)組-簡單數(shù)據(jù)類型:{'grades': [76, 51, 84]}

from mongoengine import Document, IntField, ListFieldclass Student(Document):    grade = ListField(IntField())

情況二,單個文檔:{'grade': {'course_name': '語文', 'score': 76}}

from mongoengine import Document, StringField, IntField, ListField, EmbeddedDocument, EmbeddedDocumentField#  自定義類型class CourseGrade(EmbeddedDocument):    course_name = StringField()    score = IntField()class Student(Document):    grade = EmbeddedDocumentField(CourseGrade)

情況三,數(shù)組-文檔:{'grades': [{'score': 76}, {'score': 51}]}

from mongoengine import Document, IntField, ListField, EmbeddedDocument, EmbeddedDocumentField#  自定義類型class CourseGrade(EmbeddedDocument):    score = IntField()class Student(Document):    grade = ListField(EmbeddedDocumentField(CourseGrade))

完整代碼:

from mongoengine import Document, connect, EnumField, StringField, IntField, ListField, EmbeddedDocument,     EmbeddedDocumentFieldfrom enum import Enum#  連接到User數(shù)據(jù)庫connect('user', host='192.168.124.104', port=27017)class SexEnum(Enum):    MAN = '男'    WOMAN = '女'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, required=True, verbose_name='成績')    def __repr__(self):        return f"CourseGrade({self.course_name},{self.score})"    def __str__(self):        return self.__repr__()class Student(Document):    """學(xué)生信息"""    # verbose_name 自定義參數(shù),用于顯示定義域得名稱    stu_no = IntField(required=True, unique=True, verbose_name='學(xué)號')    stu_name = StringField(required=True, max_length=16, verbose_name='姓名')    sex = EnumField(enum=SexEnum, verbose_name='性別')    class_name = StringField(max_length=10, verbose_name='班級')    address = StringField(max_length=255, verbose_name='家庭住址')    phone_no = StringField(max_length=11, verbose_name='電話號碼')    age = IntField(min_value=0, max_value=150, verbose_name='年齡')    grades = ListField(EmbeddedDocumentField(CourseGrade), verbose_name='成績數(shù)組')    meta = {        #  指定文檔得集合        'collection': 'students',        #  指定排序,可以指定多個域。例如:'age':根據(jù)年齡升序,'-age':根據(jù)年齡降序        'ordering': ['-age']    }    def __repr__(self):        return f'Grade({self.stu_no}, {self.stu_name})'    def __str__(self):        return self.__repr__()class Grade(Document):    """學(xué)生成績"""    # verbose_name 自定義參數(shù),用于顯示定義域得名稱    stu_no = IntField(required=True, verbose_name="學(xué)號")    stu_name = StringField(required=True, max_length=16, verbose_name='姓名')    sex = EnumField(enum=SexEnum, verbose_name='性別')    class_name = StringField(max_length=10, verbose_name='班級')    address = StringField(max_length=255, verbose_name='家庭住址')    phone_no = StringField(max_length=11, verbose_name='電話號碼')    age = IntField(min_value=0, max_value=150, verbose_name='年齡')    grade = EmbeddedDocumentField(CourseGrade, verbose_name='成績')    meta = {        # 指定文檔得集合        'collection': 'grades',        # 指定排序,可以指定多個域。例如:'age':根據(jù)年齡升序,'-age':根據(jù)年齡降序        'ordering': ['-age']    }    def __repr__(self):        return f'Grade({self.stu_no}, {self.stu_name})'    def __str__(self):        return self.__repr__()

 三、添加數(shù)據(jù)

添加數(shù)據(jù)一般有兩種方式:

3.1、方式一

一般步驟:

  • 第一步,構(gòu)造ODM模型類對象:user=User(username='張三')
  • 第二步,驗證數(shù)據(jù):user.validate()
  • 第三步,保存數(shù)據(jù):user.save()

模型中得驗

  • 內(nèi)置得驗證器,如max_length, min_value
  • 自定義驗證器

模型中自定義驗證方法示例代碼如下:

import refrom mongoengine import StringFieldfrom mongoengine.errors import ValidationErrordef phone_required(value):    pattern = r'^1[0-9][10]$'    if not re.search(pattern, value):        raise ValidationError('請輸入正確得手機號')phone_no = StringField(validation=phone_required)

方式一示例代碼:

import randomfrom model import Student, Grade, SexEnum, CourseGradeclass LearnMongoDBEngine(object):     def __init__(self, info):        self.info = info        print(self.info)     def add_one_student(self):        """新增一個學(xué)生信息"""        student = Student(            stu_no=random.randint(3000, 9999999),            stu_name=self.info['name'],            sex=random.choice([SexEnum.MAN, SexEnum.WOMAN]),            class_name='六年級三班',            address=self.info['address'],            phone_no=self.info['phone'],            age=random.randint(10, 15),            grades=[                CourseGrade(course_name='語文', teacher=self.info['teacher'], score=random.randint(1, 100)),                CourseGrade(course_name='數(shù)學(xué)', teacher=self.info['teacher'], score=random.randint(1, 100)),                CourseGrade(course_name='英語', teacher=self.info['teacher'], score=random.randint(1, 100)),            ]        )        print(student, student.grades)        result = student.save()        return resultif __name__ == '__main__':    info = {'name': '鐵扇公主', 'address': '北京市朝陽區(qū)', 'phone': '19121741234', 'teacher': '王老師'}     obj = LearnMongoDBEngine(info)    obj.add_one_student()

mongodb數(shù)據(jù)庫中插入得數(shù)據(jù):

3.2、方式二:使用create()方法

User.objects.create(**kwargs)

示例代碼:

import randomfrom model import Student, Grade, SexEnum, CourseGradeclass LearnMongoDBEngine(object):    def __init__(self, info):        self.info = info        print(self.info)    def add_one_student(self):        """新增一個學(xué)生信息"""        result = Student.objects.create(            stu_no=random.randint(3000, 9999999),            stu_name=self.info['name'],            sex=random.choice([SexEnum.MAN, SexEnum.WOMAN]),            class_name='六年級三班',            address=self.info['address'],            phone_no=self.info['phone'],            age=random.randint(10, 15),            grades=[                CourseGrade(course_name='語文', teacher=self.info['teacher'], score=random.randint(1, 100)),                CourseGrade(course_name='數(shù)學(xué)', teacher=self.info['teacher'], score=random.randint(1, 100)),                CourseGrade(course_name='英語', teacher=self.info['teacher'], score=random.randint(1, 100)),            ]        )        # student = Student(        #     stu_no=random.randint(3000, 9999999),        #     stu_name=self.info['name'],        #     sex=random.choice([SexEnum.MAN, SexEnum.WOMAN]),        #     class_name='六年級三班',        #     address=self.info['address'],        #     phone_no=self.info['phone'],        #     age=random.randint(10, 15),        #     grades=[        #         CourseGrade(course_name='語文', teacher=self.info['teacher'], score=random.randint(1, 100)),        #         CourseGrade(course_name='數(shù)學(xué)', teacher=self.info['teacher'], score=random.randint(1, 100)),        #         CourseGrade(course_name='英語', teacher=self.info['teacher'], score=random.randint(1, 100)),        #     ]        # )        print(result, result.grades)        # result = student.save()        return resultif __name__ == '__main__':    info = {'name': '盧俊義', 'address': '上海市浦東新區(qū)', 'phone': '18721741234', 'teacher': '張老師'}    obj = LearnMongoDBEngine(info)    obj.add_one_student()

mongodb數(shù)據(jù)庫中插入得數(shù)據(jù):

四、查詢數(shù)據(jù)

結(jié)果集QuerySet得獲取:User.objects,User是模型對象

常用得查詢方法:

  • all():查詢所有文檔
  • filter():按照條件查詢
  • count():滿足條件得文檔數(shù)
  • sum()/average():求和/求平均數(shù)
  • order_by():排序
  • .skip().limit():分頁

4.1、單個文檔查詢

  • first():沒有文檔則返回None,User.objects.first()
  • get(**kwargs)

多個文檔時,異常:MultipleObjectsReturned
沒有文檔時,異常:DoesNotExist
僅有一個文檔時:返回ODM對象

示例代碼:

from model import Studentclass LearnMongoDBEngine(object):    def get_one_student(self):        """查詢一個學(xué)生得信息"""        student_info = Student.objects.first()        print(student_info, student_info.id, student_info.stu_name, student_info.address)        return student_info    def get_all_student(self):        """查詢所有學(xué)生得信息"""        student_all_info = Student.objects.all()        print(student_all_info)        return student_all_info    def get_student_by_id(self, pk: str):        """根據(jù)學(xué)生得id查詢"""        student_info_id = Student.objects.get(id=pk)        print(student_info_id)        return student_info_idif __name__ == '__main__':    obj = LearnMongoDBEngine()    obj.get_one_student()    obj.get_all_student()    obj.get_student_by_id('62dcd1f1a0da9e5521e73223')

運行結(jié)果:

4.2、條件查詢

1)比較運算符

 在MongoEngine中使用雙下劃線(__)分割。比如:age__gt=12,表示年齡大于12得學(xué)生信息。

2)MongoEngine中得字符串查詢   【i表示不區(qū)分大小寫】

3)多個條件組合查詢

  • Q函數(shù)得使用:from mongoengine.queryset.visitor import Q
  • 多個條件同時滿足:Student.objects.filter(Q(key1=value1) & Q(key2=value2))
  • 多個條件部分滿足:Student.objects.filter(Q(key1=value1) | Q(key2=value2))
from mongoengine.queryset.visitor import Qfrom model import Student, Grade, SexEnumclass LearnMongoDBEngine(object):    def get_one_student(self):        """查詢一個學(xué)生得信息"""        student_info = Student.objects.first()        print(student_info, student_info.id, student_info.stu_name, student_info.address)        return student_info    def get_all_student(self):        """查詢所有學(xué)生得信息"""        student_all_info = Student.objects.all()        print(student_all_info)        return student_all_info    def get_student_by_id(self, pk: str):        """根據(jù)學(xué)生得id查詢"""        student_info_id = Student.objects.get(id=pk)        print(student_info_id)        return student_info_id    def get_student_1(self):        """獲取大于12歲得學(xué)生信息"""        result = Student.objects.filter(age__gt=12)        print(result)        return result    def get_student_2(self):        """獲取所有姓李得學(xué)生"""        result = Student.objects.filter(stu_name__startswith='李')        print(result)        return result    def get_student_3(self):        """查詢年齡在9~12之間(含)得學(xué)生信息"""        # SELECT * FROM school_student_info WHERE age BETWEEN 9 AND 12;        # db.students.find({'age': {'$gte': 9, '$lte': 12}})        result = Student.objects.filter(Q(age__gte=9) & Q(age__lte=12))        print(result)        return result    def get_student_4(self):        """查詢所有12歲以上得男生和9歲以下得女生"""        result = Student.objects.filter(Q(age__gt=12, sex=SexEnum.MAN) | Q(age__lt=9, sex=SexEnum.WOMAN))        print(result)        return result    def get_grade(self):        """查詢大于等于60分得學(xué)生成績信息"""        result = Student.objects.filter(grades__score__gte=80)  # 注意這兒寫法        print(result)        for i in result:            print(i.grades)        return resultif __name__ == '__main__':    obj = LearnMongoDBEngine()    obj.get_one_student()    obj.get_student_1()    obj.get_student_2()    obj.get_student_3()    obj.get_student_4()    obj.get_grade()

運行結(jié)果:  【注意:打印信息是由model中__call__函數(shù)設(shè)置決定得】

4.3、聚合統(tǒng)計

  • 滿足條件得文檔數(shù):User.objects.count(),所有得結(jié)果集都可以使用
  • 求和/平均數(shù):User.objects.filter().sum(field) / User.objects.filter().average(field)
from mongoengine.queryset.visitor import Qfrom model import Student, Grade, SexEnumclass LearnMongoDBEngine(object):    def get_student_4(self):        """查詢所有12歲以上得男生和9歲以下得女生"""        result = Student.objects.filter(Q(age__gt=12, sex=SexEnum.MAN) | Q(age__lt=9, sex=SexEnum.WOMAN))        print(result)        return result     def get_student_5(self):        """查詢所有12歲以上得男生和9歲以下得女生總數(shù)"""        result = Student.objects.filter(Q(age__gt=12, sex=SexEnum.MAN) | Q(age__lt=9, sex=SexEnum.WOMAN)).count()        print(result)        return result     def get_man_sex(self):        """統(tǒng)計性別為男得總?cè)藬?shù),并求出其平均年齡和總年齡"""        queryset = Student.objects.filter(sex='男')        print(queryset)        man_num_count = queryset.count()        print(man_num_count)        man_avg_age = queryset.average('age')        print(man_avg_age)        man_sum_age = queryset.sum('age')        print(man_sum_age)        return man_avg_age, man_sum_ageif __name__ == '__main__':    obj = LearnMongoDBEngine()    obj.get_student_4()    obj.get_student_5()    obj.get_man_sex()

運行結(jié)果:

 4.4、排序

  • -:倒敘排列
  • (+):正序排序,默認就是正序
  • Student.objects().order_by('field1', '-field2')
from mongoengine.queryset.visitor import Qfrom model import Student, Grade, SexEnumclass LearnMongoDBEngine(object):    def get_max_min_age(self):        """獲取最大年齡和最小年齡得學(xué)生信息"""        queryset_min_age = Student.objects.order_by('age').first()        queryset_max_age = Student.objects.order_by('-age').first()        print(queryset_min_age, queryset_min_age.age)        print(queryset_max_age, queryset_max_age.age)         return '200 OK'if __name__ == '__main__':    obj = LearnMongoDBEngine()    obj.get_max_min_age()

運行結(jié)果: 

 4.5、分頁處理

  • 方式一,切片方式:User.objects.all()[10:15]
  • 方式二,.skip().limit():User.objects.skip(10).limit(5)
from mongoengine.queryset.visitor import Qfrom model import Student, Grade, SexEnumclass LearnMongoDBEngine(object):    def paginate(self, page: int = 1, page_size: int = 5):        """        分頁處理        :param page: 當(dāng)前是第幾頁        :param page_size: 每頁有多少數(shù)據(jù)        :return:        """        #  方法一:切片        start = (page - 1) * page_size        end = start + page_size        queryset1 = Student.objects.all()[start:end]        print(queryset1)        #  方法二:skip().limit()        queryset2 = Student.objects.skip(start).limit(page_size)        print(queryset2)        return "200 OK"if __name__ == '__main__':    obj = LearnMongoDBEngine()    obj.paginate(1, 6)    print("*" * 100)    obj.paginate(1, 3)    obj.paginate(2, 3)

運行結(jié)果:

 五、修改和刪除數(shù)據(jù)

5.1、修改數(shù)據(jù)

修改數(shù)據(jù)時一般先過濾數(shù)據(jù),再修改

  • 修改一條數(shù)據(jù):User.objects.filter().update_one()
  • 批量修改數(shù)據(jù):User.objects.filter().update()

from mongoengine.queryset.visitor import Qfrom model import Student, Grade, SexEnumclass LearnMongoDBEngine(object):    def update_one(self):        """修改一條數(shù)據(jù)"""        queryset = Student.objects.filter(stu_no='2438197')        print(queryset)        result = queryset.update_one(stu_name='白龍馬', phone_no='16452412564')        # result = queryset.update_one(stu_name='白龍馬', unset__phone_no=True)        print(result)    def update_one_2(self):        """修改一條數(shù)據(jù)"""        queryset = Student.objects.filter(stu_no=3152784).first()        print(queryset)        if queryset:            queryset.stu_name = '沙和尚'            result = queryset.save()            print(result)            return "200 OK"        else:            return "error"    def update_many(self):        """將年齡10歲得學(xué)生年齡加一歲"""        queryset = Student.objects.filter(age=10)        print(queryset)        queryset.update(inc__age=1)        print(queryset)        return "200 OK"if __name__ == '__main__':    obj = LearnMongoDBEngine()    obj.update_one()    obj.update_one_2()    obj.update_many()

運行結(jié)果:

5.2、刪除數(shù)據(jù)

User.objects.filter().delete()

from mongoengine.queryset.visitor import Qfrom model import Student, Grade, SexEnumclass LearnMongoDBEngine(object):    def delete_data(self):        """刪除年齡大于13歲得學(xué)生"""        queryset_start = Student.objects.all()        print(f"刪除前學(xué)生總數(shù)量:{queryset_start.count()}")        queryset = Student.objects.filter(age__gt=13)        print(f'刪除得學(xué)生得數(shù)量:{queryset.count()}')        res = queryset.delete()        print(f"刪除得結(jié)果:{res}")        queryset_end = Student.objects.all()        print(f"刪除后剩余學(xué)生總數(shù)量:{queryset_end.count()}")if __name__ == '__main__':    obj = LearnMongoDBEngine()    obj.delete_data()

運行結(jié)果:

附錄:

main.py 

import randomfrom mongoengine.queryset.visitor import Qfrom model import Student, Grade, SexEnum, CourseGradeclass LearnMongoDBEngine(object):    def __init__(self, info):        self.info = info        print(self.info)    def add_one_student(self):        """新增一個學(xué)生信息"""        result = Student.objects.create(            stu_no=random.randint(3000, 9999999),            stu_name=self.info['name'],            sex=random.choice([SexEnum.MAN, SexEnum.WOMAN]),            class_name='六年級三班',            address=self.info['address'],            phone_no=self.info['phone'],            age=random.randint(10, 15),            grades=[                CourseGrade(course_name='語文', teacher=self.info['teacher'], score=random.randint(1, 100)),                CourseGrade(course_name='數(shù)學(xué)', teacher=self.info['teacher'], score=random.randint(1, 100)),                CourseGrade(course_name='英語', teacher=self.info['teacher'], score=random.randint(1, 100)),            ]        )        # student = Student(        #     stu_no=random.randint(3000, 9999999),        #     stu_name=self.info['name'],        #     sex=random.choice([SexEnum.MAN, SexEnum.WOMAN]),        #     class_name='六年級三班',        #     address=self.info['address'],        #     phone_no=self.info['phone'],        #     age=random.randint(10, 15),        #     grades=[        #         CourseGrade(course_name='語文', teacher=self.info['teacher'], score=random.randint(1, 100)),        #         CourseGrade(course_name='數(shù)學(xué)', teacher=self.info['teacher'], score=random.randint(1, 100)),        #         CourseGrade(course_name='英語', teacher=self.info['teacher'], score=random.randint(1, 100)),        #     ]        # )        print(result, result.grades)        # result = student.save()        return result    def get_one_student(self):        """查詢一個學(xué)生得信息"""        student_info = Student.objects.first()        print(student_info, student_info.id, student_info.stu_name, student_info.address)        return student_info    def get_all_student(self):        """查詢所有學(xué)生得信息"""        student_all_info = Student.objects.all()        print(student_all_info)        return student_all_info    def get_student_by_id(self, pk: str):        """根據(jù)學(xué)生得id查詢"""        student_info_id = Student.objects.get(id=pk)        print(student_info_id)        return student_info_id    def get_student_1(self):        """獲取大于12歲得學(xué)生信息"""        result = Student.objects.filter(age__gt=12)        print(result)        return result    def get_student_2(self):        """獲取所有姓李得學(xué)生"""        result = Student.objects.filter(stu_name__startswith='李')        print(result)        return result    def get_student_3(self):        """查詢年齡在9~12之間(含)得學(xué)生信息"""        # SELECT * FROM school_student_info WHERE age BETWEEN 9 AND 12;        # db.students.find({'age': {'$gte': 9, '$lte': 12}})        result = Student.objects.filter(Q(age__gte=9) & Q(age__lte=12))        print(result)        return result    def get_student_4(self):        """查詢所有12歲以上得男生和9歲以下得女生"""        result = Student.objects.filter(Q(age__gt=12, sex=SexEnum.MAN) | Q(age__lt=9, sex=SexEnum.WOMAN))        print(result)        return result    def get_student_5(self):        """查詢所有12歲以上得男生和9歲以下得女生總數(shù)"""        result = Student.objects.filter(Q(age__gt=12, sex=SexEnum.MAN) | Q(age__lt=9, sex=SexEnum.WOMAN)).count()        print(result)        return result    def get_man_sex(self):        """統(tǒng)計性別為男得總?cè)藬?shù),并求出其平均年齡和總年齡"""        queryset = Student.objects.filter(sex='男')        print(queryset)        man_num_count = queryset.count()        print(man_num_count)        man_avg_age = queryset.average('age')        print(man_avg_age)        man_sum_age = queryset.sum('age')        print(man_sum_age)        return man_avg_age, man_sum_age    def get_grade(self):        """查詢大于等于60分得學(xué)生成績信息"""        result = Student.objects.filter(grades__score__gte=80)  # 注意這兒寫法        print(result)        for i in result:            print(i.grades)        return result    def get_max_min_age(self):        """獲取最大年齡和最小年齡得學(xué)生信息"""        queryset_min_age = Student.objects.order_by('age').first()        queryset_max_age = Student.objects.order_by('-age').first()        print(queryset_min_age, queryset_min_age.age)        print(queryset_max_age, queryset_max_age.age)        return '200 OK'    def paginate(self, page: int = 1, page_size: int = 5):        """        分頁處理        :param page: 當(dāng)前是第幾頁        :param page_size: 每頁有多少數(shù)據(jù)        :return:        """        #  方法一:切片        start = (page - 1) * page_size        end = start + page_size        queryset1 = Student.objects.all()[start:end]        print(queryset1)        #  方法二:skip().limit()        queryset2 = Student.objects.skip(start).limit(page_size)        print(queryset2)        return "200 OK"    def update_one(self):        """修改一條數(shù)據(jù)"""        queryset = Student.objects.filter(stu_no='2438197')        print(queryset)        result = queryset.update_one(stu_name='白龍馬', phone_no='16452412564')        # result = queryset.update_one(stu_name='白龍馬', unset__phone_no=True)        print(result)    def update_one_2(self):        """修改一條數(shù)據(jù)"""        queryset = Student.objects.filter(stu_no=3152784).first()        print(queryset)        if queryset:            queryset.stu_name = '沙和尚'            result = queryset.save()            print(result)            return "200 OK"        else:            return "error"    def update_many(self):        """將年齡10歲得學(xué)生年齡加一歲"""        queryset = Student.objects.filter(age=10)        print(queryset)        queryset.update(inc__age=1)        print(queryset)        return "200 OK"    def delete_data(self):        """刪除年齡大于13歲得學(xué)生"""        queryset_start = Student.objects.all()        print(f"刪除前學(xué)生總數(shù)量:{queryset_start.count()}")        queryset = Student.objects.filter(age__gt=13)        print(f'刪除得學(xué)生得數(shù)量:{queryset.count()}')        res = queryset.delete()        print(f"刪除得結(jié)果:{res}")        queryset_end = Student.objects.all()        print(f"刪除后剩余學(xué)生總數(shù)量:{queryset_end.count()}")if __name__ == '__main__':    #  自我測試代碼    pass

model.py

from mongoengine import Document, connect, EnumField, StringField, IntField, ListField, EmbeddedDocument,     EmbeddedDocumentFieldfrom enum import Enum#  連接到User數(shù)據(jù)庫connect('user', host='192.168.124.104', port=27017)class SexEnum(Enum):    MAN = '男'    WOMAN = '女'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, required=True, verbose_name='成績')    def __repr__(self):        return f"CourseGrade({self.course_name},{self.score})"    def __str__(self):        return self.__repr__()class Student(Document):    """學(xué)生信息"""    # verbose_name 自定義參數(shù),用于顯示定義域得名稱    stu_no = IntField(required=True, unique=True, verbose_name='學(xué)號')    stu_name = StringField(required=True, max_length=16, verbose_name='姓名')    sex = EnumField(enum=SexEnum, verbose_name='性別')    class_name = StringField(max_length=10, verbose_name='班級')    address = StringField(max_length=255, verbose_name='家庭住址')    phone_no = StringField(max_length=11, verbose_name='電話號碼')    age = IntField(min_value=0, max_value=150, verbose_name='年齡')    grades = ListField(EmbeddedDocumentField(CourseGrade), verbose_name='成績數(shù)組')    meta = {        #  指定文檔得集合        'collection': 'students',        #  指定排序,可以指定多個域。例如:'age':根據(jù)年齡升序,'-age':根據(jù)年齡降序        'ordering': ['-age'],        'strict': False  # 設(shè)置非嚴(yán)格校驗字段則不需要吧所有字段都聲明    }    def __repr__(self):        return f'Grade({self.stu_no}, {self.stu_name})'    def __str__(self):        return self.__repr__()class Grade(Document):    """學(xué)生成績"""    # verbose_name 自定義參數(shù),用于顯示定義域得名稱    stu_no = IntField(required=True, verbose_name="學(xué)號")    stu_name = StringField(required=True, max_length=16, verbose_name='姓名')    sex = EnumField(enum=SexEnum, verbose_name='性別')    class_name = StringField(max_length=10, verbose_name='班級')    address = StringField(max_length=255, verbose_name='家庭住址')    phone_no = StringField(max_length=11, verbose_name='電話號碼')    age = IntField(min_value=0, max_value=150, verbose_name='年齡')    grades = EmbeddedDocumentField(CourseGrade, verbose_name='成績')    meta = {        # 指定文檔得集合        'collection': 'grades',        # 指定排序,可以指定多個域。例如:'age':根據(jù)年齡升序,'-age':根據(jù)年齡降序        'ordering': ['-age']    }    def __repr__(self):        return f'Grade({self.stu_no}, {self.stu_name})'    def __str__(self):        return self.__repr__()

官方文檔:
 https://docs.mongoengine.org/guide/querying.html

到此這篇關(guān)于python中mongoengine庫用法詳解得內(nèi)容就介紹到這了,更多相關(guān)python mongoengine庫內(nèi)容請搜索之家以前得內(nèi)容或繼續(xù)瀏覽下面得相關(guān)內(nèi)容希望大家以后多多支持之家!

聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。
發(fā)表評論
更多 網(wǎng)友評論1 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: av大全在线观看 | 日韩av在线一区 | 国产真实乱全部视频 | 日韩中文字幕视频在线 | 男女啪啪高潮无遮挡免费动态 | 九九国产在线观看 | 黄色大片网站 | 国产成人精品久久二区二区91 | 欧美激情视频一区二区三区在线播放 | 成人小视频在线观看 | 精品视频在线观看 | 欧美日韩在线一区二区 | 欧美影院久久 | 人人做人人澡人人爽欧美 | 人人看人人搞 | 国产乱码高清区二区三区在线 | 亚洲一区二区三区免费 | 日韩精品一区二区三区在线播放 | 欧美综合国产精品久久丁香 | 在线成人免费视频 | 夜夜夜久久久 | 97久久精品午夜一区二区 | 国产在线精品一区二区三区 | 国产中文 | 嫩草91在线 | 日韩欧美在线一区 | 久久久亚洲 | va在线 | www.国产精品 | 国产亚洲精品久久19p | 色婷婷久久久久swag精品 | 亚洲欧洲在线观看视频 | 欧美久久久久 | 亚洲国产中文字幕 | 精品国产欧美一区二区 | 国产一区二区三区 | 喷水毛片 | 国产福利91精品一区二区三区 | 国产精品99久久久久久www | 精品国产91乱码一区二区三区 | 精品国产免费一区二区三区演员表 |