python 操作三大主流数据库 第八课
tags:
- python3
- 慕课网
categories:
-
python3
-
MongoDB
-
ODM
文章目录
第一节 MongoEngine安装及连接
1. mongoengine安装
1. 安装:pip install -i https://pypi.douban.com/simple/ mongoengine
2. Pypi: https://pypi.python.org/pypi/mongoengine
3. Github: https://github.com/MongoEngine/mongoengine
4. 文档: https://mongoengine-odm.readthedocs.io/index.html
2. mongoengine连接MongoDB数据库
1. 首先把MongoDB的服务启动起来mongod.exe --dbpath D:\MongoDB\DB
2. 方式一:简写 connect('students')
3. 方式二:指定端口和地址connect('students', host= '192.168.1.35, port=27017)
4. 方式三:使用URI connect('students', host= 'mongodb://localhost/students')
第二节 ODM模型介绍以及增删改查
1. 常见类型和数据库模型构建
1. StringField
2. ObjectldFiel
3. IntField
4. FloatField
5. DecimalField
6. BooleanField
7. DateTimeField
8. ListField
# mongoengine连接MongoDB数据库
from mongoengine import connect, Document, EmbeddedDocument, DynamicDocument, StringField, IntField, \
FloatField, ListField, EmbeddedDocumentField
connect('students')
SEX_CHICES = (
('male', '男'),
('female', '女')
)
class Grade(EmbeddedDocument):
''' 学生的成绩 '''
name = StringField(required=True) # 课程
score = FloatField(required=True)
#class Student(Document):
# 如果我们想增加一些students没有的字段,可以用DynamicDocument。
# 使用Document如果字段没有定义, 就不能增删改查。可以用DynamicDocument改进
class Student(DynamicDocument):
'''学生'''
name = StringField(max_length=32, required=True)
age = IntField(required=True)
sex = StringField(choices=SEX_CHICES, required=True)
grade = FloatField()
address = StringField()
# 很多科目的成绩 嵌套的文档
grades = ListField(EmbeddedDocumentField(Grade))
meta = {
# 指定添加到students集合,不设置的话默认为student集合
'collection': 'students',
# 排序功能,按照分数倒序
'ordering': ['-grade']
}
2. 查询数据
def get_one(self):
''' 获取单条数据 '''
return Student.objects.first()
def get_more(self):
''' 获取多条数据 '''
# return Student.objects
return Student.objects.all()
def get_one_from_oid(self, oid):
''' 查询指定id的数据 '''
return Student.objects.filter(id=oid).first()
3. 修改数据
def update(self):
''' 修改数据 '''
# 修改一条数据
# res = Student.objects.filter(sex='male').update_one(inc__age=1)
# return res
# 修改多条数据
res = Student.objects.filter(sex='male').update(inc__age=10)
return res
4. 删除数据
def delete(self):
''' 删除数据 '''
# 删除一条数据
# res = Student.objects.filter(sex='male').first().delete()
# return res
# 删除多条数据
res = Student.objects.filter(gender='male').delete()