Python连接MongoDB【mongoengine】

#!/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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值