我爱编程

数据库笔记(7)- MongoDB ORM

2018-06-18  本文已影响0人  逍遥_yjz

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

上一篇下一篇

猜你喜欢

热点阅读