美文网首页我爱编程
数据库笔记(7)- MongoDB ORM

数据库笔记(7)- MongoDB ORM

作者: 逍遥_yjz | 来源:发表于2018-06-18 15:46 被阅读0次

    MongoDB ORM

    从对象到文档的映射


    1.安装



    安装成功后,可以测试。

    如何连接数据库那



    连接本地的数据库用第一个方式就可以啦。
    先启动MongoDB服务,然后连接,

    import mongoengine
    from mongoengine import connect
    connect(‘students’)
    

    2.ORM 模型的介绍


    # coding:utf-8
    
    from mongoengine import connect,Document,EmbeddedDocument,\
            StringField,IntField,FloatField,ListField,EmbeddedDocumentField
    
    connect('students')
    
    SEX_CHOICES = (
        ('male','男'),
        ('female','女'),
    )
    
    class Grade(EmbeddedDocument):
        ''' 成绩 '''
        name = StringField(required=True)
        score = FloatField(required=True)
        # 最后要把它关联进去
    
    class Student(Document):
        name = StringField(max_length=32,required=True)
        age = IntField(required=True)
        sex = StringField(choices=SEX_CHOICES,required=True)
        grade = FloatField()
        address = StringField()
        # 下面需要声明一个分数,由于有科目所以string类型搞不定
        # 嵌套一个
        grades = ListField(EmbeddedDocumentField(Grade))
    
    

    3.新增数据


    可以通过变动的DynamicDocument 活动的文档来添加属性。

    4.查询数据


    减号代表倒序排列。
    以年龄排序,使用get获取数据,发现多条数据


    报错,是三条数据,所以错啦。

    也可以重新制定排序

    5.修改、删除数据


    通过修改器,两个下划线。



    大于16年龄
    所有的代码:

    
    # coding:utf-8
    
    from mongoengine import connect,Document,EmbeddedDocument,\
            StringField,IntField,FloatField,ListField,EmbeddedDocumentField,DynamicDocument
    
    connect('students')
    
    SEX_CHOICES = (
        ('male','男'),
        ('female','女'),
    )
    
    class Grade(EmbeddedDocument):
        ''' 成绩 '''
        name = StringField(required=True)
        score = FloatField(required=True)
        # 最后要把它关联进去
    
    class Student(DynamicDocument):
        name = StringField(max_length=32,required=True)
        age = IntField(required=True)
        sex = StringField(choices=SEX_CHOICES,required=True)
        grade = FloatField()
        address = StringField()
        # 下面需要声明一个分数,由于有科目所以string类型搞不定
        # 嵌套一个
        grades = ListField(EmbeddedDocumentField(Grade))
        #remark = StringField()
    
        #这里不指定连接数据表名,根据类名自动创建
        meta = {
            'collection':'students',
            'ordering':['-age']
        }
    
    
    class TestMongoEngine(object):
    
        def add_one(self):
            ''' 添加一条数据到数据库 '''
            yuwen = Grade(
                name = '语文',
                score = 90)
            shuxue = Grade(
                name = '数学',
                score = 100)
            stu_obj = Student(
                name='张三5',
                # 年龄是必须填写的,不填写报错
                age = 17,
                sex = 'male',
                grades = [yuwen,shuxue]
            )
            stu_obj.remark = 'ramark'
            stu_obj.save()
            return stu_obj
    
        def get_one(self):
            '''查询一条数据'''
            return Student.objects.first()
    
        def get_more(self):
            '''查询多条数据'''
            return Student.objects.all()
    
        def get_from_id(self,oid):
            '''根据id查询数据'''
            # z这里也可以用get
            return Student.objects.filter(pk=oid).first()
    
        def update(self):
            '''修改数据'''
            # 修改所有的男生年龄,增加10岁
            #return Student.objects.filter(sex='male').update(inc__age = 10)
            # 修改一条数据
            return Student.objects.filter(sex='male').update_one(inc__age=100)
    
        def delete(self):
            '''删除数据 '''
            # 删除一条数据
            #return Student.objects.filter(sex='male').first().delete()
            # 删除多条数据
            return Student.objects.filter(sex='male').delete()
    
    
    
    def main():
        obj = TestMongoEngine()
        # rest = obj.add_one()
        # print(rest.pk)
    
        # 返回的是对像
        # rest = obj.get_one()
        # print(rest.id)
        # print(rest.name)
    
        # rows = obj.get_more()
        # for row in rows:
        #     print(row.name)
    
    
        # rest = obj.get_from_id('5b272b2dbb07651ad02a143e')
        # if rest:
        #     print(rest.id)
        #     print(rest.name)
    
        # rest = obj.update()
        # print(rest)  # 打印的行数 3
    
        rest = obj.delete()
        print(rest)  # 打印的行数 3
    
    if __name__ == '__main__':
        main()
    

    数据库笔记(1)-简述
    数据库笔记(2)- Mysql 基础
    数据库笔记(3)-ORM
    数据库笔记(4)-网易新闻的实战
    数据库笔记(5)- MongoDB基础
    数据库笔记(6)- Python 操作MongoDB
    数据库笔记(7)- MongoDB ORM
    数据库笔记(8)- 网易新闻实战
    数据库笔记(9)- Redis 数据库基础
    数据库笔记(10)- Python 操作Redis

    相关文章

      网友评论

        本文标题:数据库笔记(7)- MongoDB ORM

        本文链接:https://www.haomeiwen.com/subject/ejyneftx.html