MongoDB ODM

  1 # from mongoengine import *
  2 from mongoengine import connect, Document, EmbeddedDocument, \
  3     StringField, IntField, FloatField, ListField, EmbeddedDocumentField
  4 
  5 connect('students')   # 连接数据库
  6 
  7 SEX_CHOISE = (       # 设置性别选项
  8     ('male', ''),
  9     ('female', '')
 10 )
 11 
 12 
 13 class Grade(EmbeddedDocument):
 14     """成绩"""
 15     name = StringField(required=True)
 16     score = FloatField(required=True)
 17 
 18 
 19 class Student(Document):
 20     name = StringField(max_length=32, requiredd=True)
 21     age = IntField(required=True)
 22     sex = StringField(choices=SEX_CHOISE, required=True)
 23     grade = FloatField()
 24     address = StringField()
 25     grades = ListField(EmbeddedDocumentField(Grade))
 26     # remark = StringField()
 27 
 28     meta = {
 29         'collection': 'student',    # 设置集合名称
 30         'ordering': ['-age']        # 集合按年龄倒序
 31     }
 32 
 33 
 34 class TestMongoEngine(object):
 35 
 36     def add_one(self):
 37         """添加一条数据"""
 38         yuwen = Grade(
 39             name='语文',
 40             score=90)
 41         shuxue = Grade(
 42             name='数学',
 43             score=100)
 44         stu_obj = Student(
 45             name='张三',
 46             age=15,
 47             sex='male',
 48             grades=[yuwen, shuxue]
 49         )
 50         # stu_obj.remark = 'remark'    必须在配置数据库时先定义,后续才可以添加
 51         stu_obj.save()
 52         return stu_obj
 53 
 54     def get_one(self):
 55         """查询一条数据"""
 56         return Student.objects.first()
 57 
 58     def get_more(self):
 59         """查询多条诗句"""
 60         # return Student.objects
 61         return Student.objects.all()
 62 
 63     def get_one_from_oid(self, oid):
 64         """查询指定ID的数据"""
 65         return Student.objects.filter(id=oid).first()    # 注意:根据id查询数据时一定要添加first(),不然报错或查不到数据
 66 
 67     def update(self):
 68         """修改数据"""
 69         # 修改一条数据
 70         # rest = Student.objects.filter(sex='male').update_one(inc__age=1)
 71         # return rest
 72         # 修改多条数据
 73         rest = Student.objects.filter(sex='male').update(inc__age=1)
 74         # 年龄增加1岁,文档:https://mongoengine-odm.readthedocs.io/guide/querying.html#advanced-queries
 75         # 查询条件(filter)里面可以增加gt__age=16表示年龄大于16岁,文档:https://mongoengine-odm.readthedocs.io/guide/querying.html#query-operators
 76         return rest
 77 
 78     def delete(self):
 79         """删除数据"""
 80         # 删除一条数据
 81         return Student.objects.filter(sex='male').first().delete()
 82         # 删除多条数据
 83         return Student.objects.filter(sex='male').delete()
 84 
 85 
 86 def main():
 87     obj = TestMongoEngine()
 88     # rest = obj.add_one()
 89     # print(rest.id)
 90 
 91     # rest = obj.get_one()
 92     # print(rest.id, rest.name, rest.grades)
 93 
 94     # rest = obj.get_more()
 95     # for row in rest:
 96     #     print(row.name)
 97 
 98     rest = obj.get_one_from_oid("5e83f7e16490e7f8a4e4e284")
 99     if rest:
100         print(rest.name)
101     else:
102         print("查询的数据不存在")
103 
104     # rest = obj.update()
105     # for row in rest:
106     #     print(row.age)
107 
108     # rest = obj.delete()
109     # print(rest)   # 删除一条时返回None,删除多条是返回删除的数据条数
110 
111 
112 if __name__ == '__main__':
113     main()

猜你喜欢

转载自www.cnblogs.com/zuzhuangmengxiang/p/12620321.html