mongoengine中meta元类用法详解

将meta用法都直接展现在代码中。

示例代码:

main.py

from model import Student
import random


class LearnMongoDBEngine(object):
    def add_one_student(self):
        """新增一个学生信息"""
        result = Student.objects.create(
            stu_no=random.randint(3000, 9999999),
            stu_name='张三',
            address='山东省青岛市',
            phone_no='12345678910',
            age=random.randint(10, 15)
        )
        return result

    def get_one_student(self):
        """查询一个学生的信息"""
        student_info = Student.objects.first()
        print(student_info)
        return student_info

    def get_all_student(self):
        """查询所有学生的信息"""
        student_all_info = Student.objects.all()
        print(student_all_info)
        return student_all_info


if __name__ == '__main__':
    #  自我测试代码
    obj = LearnMongoDBEngine()
    ret = obj.add_one_student()
    print(ret)
    obj.get_one_student()
    obj.get_all_student()

model.py

from mongoengine import Document, connect, StringField, IntField

#  连接到python_test数据库, 建立别名为'my_test'的连接
connect('python_test', host='127.0.0.1', port=27017, alias='my_test')


class Student(Document):
    """学生信息"""
    stu_no = IntField(required=True, unique=True, verbose_name='学号')
    stu_name = StringField(required=True, max_length=16, 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='年龄')

    # 当程序运行时,若数据库不存在时会新建的
    meta = {
        # 自动创建索引
        'auto_create_index': True,  # 当为True时,若indexes中有字段创建索引时,当存在unique时会报错
        # 继承文档字段
        # 'allow_inheritance': True,  # 这里要设置为True,默认是False
        # 抽象类
        # 'abstract': True,  # 当为True时,直接运行该程序会报错,注意场景
        # 创建集合别名,和连接数据库时的alias相关
        'db_alias': 'my_test',
        #  指定文档的集合
        'collection': 'students',
        # 自定义集合名
        'verbose_name': '学生表',
        # True时,在后台创建索引
        'index_background': True,
        'indexes': [
            {
                'fields': ['stu_name'],
                'unique': True
            },
            {
                'fields': ['age']
            }
        ],
        #  指定排序,可以指定多个域。例如:'age':根据年龄升序,'-age':根据年龄降序
        'ordering': ['-age'],
        # 设置非严格校验字段,则不需要把所有字段都声明
        'strict': False,
        # 最大文档数
        'max_documents': 1000,
        # 最大存储 2M
        'max_size': 2000000
    }

    def __repr__(self):
        return f'Student_info({self.stu_no}, {self.stu_name}, {self.age})'

    def __str__(self):
        return self.__repr__()

运行结果:

参考博文:

MongoEngine文档—元类Meta定义_宅神kin的博客-CSDN博客_mongoengine

MongoEngine中文文档 - zhenyuantg - 博客园

MongoEngine如何处理索引(创建、更新、删除)? - 问答 - Python中文网 

mongoengine - 公梓小白 - 博客园 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值