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

詳解python中mongoengine庫(kù)用法

目錄

一、MongoDB得安裝與連接

安裝:pip install mongoengine

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

from pymongo import MongoClientcli = MongoClient('192.168.124.104', 27017)mongodb = cli['test']print(mongodb)
from mongoengine import connect#  連接到User數(shù)據(jù)庫(kù)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:是否為必填項(xiàng)
  • default:默認(rèn)值
  • unique:唯一性約束
  • choices:可選擇得列表
  • primary_key:是否為文檔得主鍵,默認(rèn)為False

2.4、類屬性meta常見配置項(xiàng)

類屬性,其配置項(xiàng)為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 = {    }

常見得配置項(xiàng):

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

2.5、文檔得嵌套模型

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

文檔得嵌套場(chǎng)景

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

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

情況二,單個(gè)文檔:{'grade': {'course_name': '語(yǔ)文', '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ù)庫(kù)connect('user', host='192.168.124.104', port=27017)class SexEnum(Enum):    MAN = '男'    WOMAN = '女'class CourseGrade(EmbeddedDocument):    """成績(jī)信息(科目、老師、成績(jī))-被嵌套得文檔"""    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='成績(jī)')    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é)號(hào)')    stu_name = StringField(required=True, max_length=16, verbose_name='姓名')    sex = EnumField(enum=SexEnum, verbose_name='性別')    class_name = StringField(max_length=10, verbose_name='班級(jí)')    address = StringField(max_length=255, verbose_name='家庭住址')    phone_no = StringField(max_length=11, verbose_name='電話號(hào)碼')    age = IntField(min_value=0, max_value=150, verbose_name='年齡')    grades = ListField(EmbeddedDocumentField(CourseGrade), verbose_name='成績(jī)數(shù)組')    meta = {        #  指定文檔得集合        'collection': 'students',        #  指定排序,可以指定多個(gè)域。例如:'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é)生成績(jī)"""    # verbose_name 自定義參數(shù),用于顯示定義域得名稱    stu_no = IntField(required=True, verbose_name="學(xué)號(hào)")    stu_name = StringField(required=True, max_length=16, verbose_name='姓名')    sex = EnumField(enum=SexEnum, verbose_name='性別')    class_name = StringField(max_length=10, verbose_name='班級(jí)')    address = StringField(max_length=255, verbose_name='家庭住址')    phone_no = StringField(max_length=11, verbose_name='電話號(hào)碼')    age = IntField(min_value=0, max_value=150, verbose_name='年齡')    grade = EmbeddedDocumentField(CourseGrade, verbose_name='成績(jī)')    meta = {        # 指定文檔得集合        'collection': 'grades',        # 指定排序,可以指定多個(gè)域。例如:'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模型類對(duì)象:user=User(username='張三')
  • 第二步,驗(yàn)證數(shù)據(jù):user.validate()
  • 第三步,保存數(shù)據(jù):user.save()

模型中得驗(yàn)

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

模型中自定義驗(yàn)證方法示例代碼如下:

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('請(qǐng)輸入正確得手機(jī)號(hào)')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):        """新增一個(gè)學(xué)生信息"""        student = Student(            stu_no=random.randint(3000, 9999999),            stu_name=self.info['name'],            sex=random.choice([SexEnum.MAN, SexEnum.WOMAN]),            class_name='六年級(jí)三班',            address=self.info['address'],            phone_no=self.info['phone'],            age=random.randint(10, 15),            grades=[                CourseGrade(course_name='語(yǔ)文', 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='英語(yǔ)', teacher=self.info['teacher'], score=random.randint(1, 100)),            ]        )        print(student, student.grades)        result = student.save()        return resultif __name__ == '__main__':    info = {'name': '鐵扇公主', 'address': '北京市朝陽(yáng)區(qū)', 'phone': '19121741234', 'teacher': '王老師'}     obj = LearnMongoDBEngine(info)    obj.add_one_student()

mongodb數(shù)據(jù)庫(kù)中插入得數(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):        """新增一個(gè)學(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='六年級(jí)三班',            address=self.info['address'],            phone_no=self.info['phone'],            age=random.randint(10, 15),            grades=[                CourseGrade(course_name='語(yǔ)文', 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='英語(yǔ)', 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='六年級(jí)三班',        #     address=self.info['address'],        #     phone_no=self.info['phone'],        #     age=random.randint(10, 15),        #     grades=[        #         CourseGrade(course_name='語(yǔ)文', 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='英語(yǔ)', 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ù)庫(kù)中插入得數(shù)據(jù):

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

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

常用得查詢方法:

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

4.1、單個(gè)文檔查詢

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

多個(gè)文檔時(shí),異常:MultipleObjectsReturned
沒有文檔時(shí),異常:DoesNotExist
僅有一個(gè)文檔時(shí):返回ODM對(duì)象

示例代碼:

from model import Studentclass LearnMongoDBEngine(object):    def get_one_student(self):        """查詢一個(gè)學(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')

運(yùn)行結(jié)果:

4.2、條件查詢

1)比較運(yùn)算符

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

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

3)多個(gè)條件組合查詢

  • Q函數(shù)得使用:from mongoengine.queryset.visitor import Q
  • 多個(gè)條件同時(shí)滿足:Student.objects.filter(Q(key1=value1) & Q(key2=value2))
  • 多個(gè)條件部分滿足: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):        """查詢一個(gè)學(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é)生成績(jī)信息"""        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()

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

4.3、聚合統(tǒng)計(jì)

  • 滿足條件得文檔數(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)計(jì)性別為男得總?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()

運(yùn)行結(jié)果:

 4.4、排序

  • -:倒敘排列
  • (+):正序排序,默認(rèn)就是正序
  • 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()

運(yùn)行結(jié)果: 

 4.5、分頁(yè)處理

  • 方式一,切片方式: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):        """        分頁(yè)處理        :param page: 當(dāng)前是第幾頁(yè)        :param page_size: 每頁(yè)有多少數(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)

運(yùn)行結(jié)果:

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

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

修改數(shù)據(jù)時(shí)一般先過濾數(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()

運(yùn)行結(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()

運(yùn)行結(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):        """新增一個(gè)學(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='六年級(jí)三班',            address=self.info['address'],            phone_no=self.info['phone'],            age=random.randint(10, 15),            grades=[                CourseGrade(course_name='語(yǔ)文', 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='英語(yǔ)', 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='六年級(jí)三班',        #     address=self.info['address'],        #     phone_no=self.info['phone'],        #     age=random.randint(10, 15),        #     grades=[        #         CourseGrade(course_name='語(yǔ)文', 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='英語(yǔ)', teacher=self.info['teacher'], score=random.randint(1, 100)),        #     ]        # )        print(result, result.grades)        # result = student.save()        return result    def get_one_student(self):        """查詢一個(gè)學(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)計(jì)性別為男得總?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é)生成績(jī)信息"""        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):        """        分頁(yè)處理        :param page: 當(dāng)前是第幾頁(yè)        :param page_size: 每頁(yè)有多少數(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__':    #  自我測(cè)試代碼    pass

model.py

from mongoengine import Document, connect, EnumField, StringField, IntField, ListField, EmbeddedDocument,     EmbeddedDocumentFieldfrom enum import Enum#  連接到User數(shù)據(jù)庫(kù)connect('user', host='192.168.124.104', port=27017)class SexEnum(Enum):    MAN = '男'    WOMAN = '女'class CourseGrade(EmbeddedDocument):    """成績(jī)信息(科目、老師、成績(jī))-被嵌套得文檔"""    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='成績(jī)')    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é)號(hào)')    stu_name = StringField(required=True, max_length=16, verbose_name='姓名')    sex = EnumField(enum=SexEnum, verbose_name='性別')    class_name = StringField(max_length=10, verbose_name='班級(jí)')    address = StringField(max_length=255, verbose_name='家庭住址')    phone_no = StringField(max_length=11, verbose_name='電話號(hào)碼')    age = IntField(min_value=0, max_value=150, verbose_name='年齡')    grades = ListField(EmbeddedDocumentField(CourseGrade), verbose_name='成績(jī)數(shù)組')    meta = {        #  指定文檔得集合        'collection': 'students',        #  指定排序,可以指定多個(gè)域。例如:'age':根據(jù)年齡升序,'-age':根據(jù)年齡降序        'ordering': ['-age'],        'strict': False  # 設(shè)置非嚴(yán)格校驗(yàn)字段則不需要吧所有字段都聲明    }    def __repr__(self):        return f'Grade({self.stu_no}, {self.stu_name})'    def __str__(self):        return self.__repr__()class Grade(Document):    """學(xué)生成績(jī)"""    # verbose_name 自定義參數(shù),用于顯示定義域得名稱    stu_no = IntField(required=True, verbose_name="學(xué)號(hào)")    stu_name = StringField(required=True, max_length=16, verbose_name='姓名')    sex = EnumField(enum=SexEnum, verbose_name='性別')    class_name = StringField(max_length=10, verbose_name='班級(jí)')    address = StringField(max_length=255, verbose_name='家庭住址')    phone_no = StringField(max_length=11, verbose_name='電話號(hào)碼')    age = IntField(min_value=0, max_value=150, verbose_name='年齡')    grades = EmbeddedDocumentField(CourseGrade, verbose_name='成績(jī)')    meta = {        # 指定文檔得集合        'collection': 'grades',        # 指定排序,可以指定多個(gè)域。例如:'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庫(kù)用法詳解得內(nèi)容就介紹到這了,更多相關(guān)python mongoengine庫(kù)內(nèi)容請(qǐng)搜索之家以前得內(nèi)容或繼續(xù)瀏覽下面得相關(guān)內(nèi)容希望大家以后多多支持之家!

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

返回頂部

主站蜘蛛池模板: 成年女人免费v片 | 伊人性伊人情综合网 | 午夜精品一区二区三区在线视频 | 人人人人干 | 97国产精品| 亚洲一级黄色 | 欧美精品片| 精品免费看| 91性高湖久久久久久久久_久久99 | 色综合美女 | 欧美激情久久久 | 九九亚洲 | 一区| 欧洲一级视频 | 91久久久精品国产一区二区蜜臀 | 国产亚洲www| 韩国av一区二区 | 日韩欧美在线视频观看 | 国产精品一区久久久 | 一级片片 | 日韩亚洲一区二区 | 日本黄色片免费在线观看 | 一区二区精品 | 免费在线观看成人 | 久久999| 久久综合一区二区 | 97伦理电影网 | 天天碰夜夜操 | 日本a视频 | 香蕉视频久久久 | 亚洲精品视频在线播放 | 久久新视频 | 日韩av一区二区在线观看 | 欧美精品一区二区三区视频 | 国产高清在线观看 | 日韩一区二区三区视频在线观看 | 精品日韩欧美一区二区 | 天天爽一爽 | 久久久久国产一区二区三区 | 久久精品网 | 中文字幕在线网 |