#!/usr/bin/env python
# encoding: utf-8
from datetime import datetime
from mongoengine import connect, Document, StringField, IntField, FloatField, ListField, DateTimeField, \
EmbeddedDocument, EmbeddedDocumentField
connect('students', host='localhost', port=27017)
SEX_CHOICES = (
('male', '男'),
('female', '女')
)
class Grade(EmbeddedDocument):
""" 成绩 """
subject = StringField(required=True)
score = FloatField(required=True)
class Student(Document):
""" 学生 """
meta = {
'collection': 'students', #定义集合名称
}
name = StringField(max_length=32, required=True) # max_length最大长度,required=True 不能不填写
age = IntField(required=True)
grade = FloatField()
address = StringField()
sex = StringField(choices=SEX_CHOICES, required=True) # choices 只能根据定义的SEX_CHOICES选择
grades = ListField(EmbeddedDocumentField(Grade))
created_at = DateTimeField(default=datetime.now())
class TestMongoEngine(object):
# 新增数据
def add_one(self):
yuwen = Grade(
subject="语文",
score=83
)
english = Grade(
subject="英语",
score=92
)
mathematics = Grade(
subject="数学",
score=95
)
stu_obj = Student(
name="李1",
age=21,
address="ShangHai",
sex='female',
grades=[yuwen, english, mathematics]
)
# stu_obj.remark = "remark"
stu_obj.save()
return stu_obj
# 获取一条数据
def get_one(self):
return Student.objects.first({})
# 获取多条数据
def get_More(self):
return Student.objects.all()
# 获取一条带条件数据,根据id获取,id=pk
def get_from_oid(self, oid):
return Student.objects.filter(pk=oid).first()
# 修改数据
def update(self):
"""将所有男生年龄增加2"""
return Student.objects.filter(sex='male').update(inc__age=2)
# 返回结果为修改行数,inc__ 参考文档:http://docs.mongoengine.org/guide/querying.html?highlight=inc__
# 删除数据
def delete(self):
"""删除数据"""
return Student.objects.filter(sex='female',name='李1').delete() # 返回结果为删除行数
def main():
obj = TestMongoEngine()
#新增数据
# rest = obj.add_one()
# print(rest.name)
# 获取一条数据
# rest = obj.get_one()
# print(rest.grades[0].score)
# 获取多条数据
# rest = obj.get_More()
# print(type(rest), rest[0].name)
# 获取一条带条件数据
# rest = obj.get_from_oid('5b10f316485e2e4a9416090e')
# print(rest.name)
# 修改数据
# rest = obj.update()
# print(rest)
# 删除数据
# rest = obj.delete()
# print(rest)
if __name__ == '__main__':
main()
当添加文档如:
# stu_obj.remark = "remark"
在class Student中没有定义,添加时则remark无法添加,
这时可以修改class Student的定义:
class Student(DynamicDocument):
......
......
资料参考:
MongoEngine:http://docs.mongoengine.org/guide/installing.html#
Flask-MongoEngine :http://docs.mongoengine.org/projects/flask-mongoengine/en/latest/