数据库笔记(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