将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__()
运行结果: