【学习笔记】mongodb的使用(二)flask项目使用mongodb实现人员管理系统
本教程目录:
pipenv install 安装依赖
(会报错,要修改此目录下的
werkzeug中的routing.py
再次进入虚拟环境:
pipenv shell
输入命令:
(chapter_4-jr12ODI9) D:\mongdb redis代码\SourceCodeofMongoRedis\chapter_4>set FLASK_APP=main.py
(chapter_4-jr12ODI9) D:\mongdb redis代码\SourceCodeofMongoRedis\chapter_4>flask run
执行python generate_data.py生成数据
D:\mongdb redis代码\SourceCodeofMongoRedis\chapter_4\bin>pip install pymongo
D:\mongdb redis代码\SourceCodeofMongoRedis\chapter_4\bin>python generate_data.py
查看图形界面:
修改DataBaseManager.py:
class DataBaseManager(object):def __init__(self):"""你需要在这里初始化MongoDB的连接,连上本地MongoDB,库名为chapter_4,集合名为people_info"""client = MongoClient()database = client.chapter_4 #指定使用chapter_4数据库self.handler = database.people_info #指定使用people_info集合def query_info(self):"""你需要在这里实现这个方法,查询集合people_info并返回所有"deleted"字段为0的数据。注意返回的信息需要去掉_id"""info_list = list(self.handler.find({'deleted':0},{'_id':0}))#查询到所有deleted字段为0的数据,去掉ObjectId以后返回,再用python的list方法把pymongo返回的对象转换为包含字典的列表return info_list
中止后重新启动:
刷新页面:
增加数据:
def add_info(self, para_dict):"""你需要实现这个方法,添加人员信息。你可以假设para_dict已经是格式化好的数据了,你直接把它插入MongoDB即可,不需要做有效性判断。在实现这个方法时,你需要首先查询MongoDB,获取已有数据里面最新的ID是多少,这个新增的人员的ID需要在已有的ID基础上加1.:param para_dict: 格式为{'name': 'xxx', 'age': 12, 'birthday': '2000-01-01', 'origin_home': 'xxx', 'current_home': 'yyy', 'deleted': 0}:return: True或者False"""last_id = self._query_last_id()this_id = last_id+1para_dict['id'] = this_idtry:self.handler.insert_one(para_dict)except Exception as e:print('插入数据失败,保存信息如下:{}'.format(e))return False
# add_info()方法首先调用_query_last_id()方法获得当前最大的id,然
# 后把这个id加1作为新的id。再将新的id放到参数需要插入的字
# 典“para_dict”中并插入数据库中。return True
查询数据:
def _query_last_id(self):"""你需要实现这个方法,查询当前已有数据里面最新的id是多少返回一个数字,如果集合里面至少有一条数据,那么就返回最新数据的id,如果集合里面没有数据,那么就返回0提示:id不重复,每次加1:return: 最新ID"""last_info = self.handler.find({},{'_id':0,'id':1}).sort('id',-1).limit(1) #首先查询people_info集合,以“id”字段倒序排列,
#只取倒序排列以后的第1条数据,即id最大的那一条数据return last_info[0]['id'] if last_info else 0
修改数据:
def update_info(self, people_id, para_dict):"""你需要实现这个方法。这个方法用来更新人员信息。更新信息是根据people_id来查找的,因此people_id是必需的。:param people_id: 人员id,数字:param para_dict: 格式为{'name': 'xxx', 'age': 12, 'birthday': '2000-01-01', 'origin_home': 'xxx', 'current_home': 'yyy'}:return: True或者False"""try:y = self.handler.update_one({'id':people_id},{'$set':para_dict})print(y)except Exception as e:print('更新数据失败')return Falsereturn True
点击编辑,修改数据,能够成功更新了。
删除数据:
def del_info(self, people_id):"""你需要实现这个方法。请注意,此处需要使用"假删除",把删除操作写为更新"deleted"字段的值为1:param people_id: 人员id:return: True或者False"""return self.update_info(people_id,{'deleted':1})
为了防止数据的误删除,使用“假删除”是一个简单有效的方法。在查询数据时,用到的查询条件为“deleted字段为0”,那么只要把deleted字段改为非0就可以让数据查不出来,也就变相实现了删除的功能。因此,删除数据的本质仍然是更新数据
本教程代码学习自书籍《左手Mongodb 右手Redis》
【学习笔记】mongodb的使用(二)flask项目使用mongodb实现人员管理系统相关推荐
- OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己
OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...
- Vue学习笔记:使用CLI构建Vue项目
Vue学习笔记:使用CLI构建Vue项目 一.安装Vue CLI 要用到集成在node.js里的npm来安装Vue CLI. 1.下载并安装node.js 2.配置node.js的环境变量 3.启动命 ...
- 【AngularJs学习笔记五】AngularJS从构建项目开始
为什么80%的码农都做不了架构师?>>> #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...
- Slicer学习笔记(四十二)slicer c++源码编译
Slicer学习笔记(四十二)slicer c++源码编译 1.cmake生成项目 2.编译失败的原因汇总 2.1.下载代码失败 之前在windows下编译slicer,没有做笔记. 后面再次编译还会 ...
- Redis学习笔记②实战篇_黑马点评项目
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...
- OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五
OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...
- OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co
OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- Slicer学习笔记(六十二)slicer下导出模块接口
Slicer学习笔记(六十二)slicer下导出模块接口 1. 参考文件实现 1. 参考文件实现 通过配置config_file为每一个生成类添加 Export,并为每个Module生成 Export ...
最新文章
- 二维几何变换---OpenGL几何变换编程示例
- Mysql初始化root密码和允许远程访问
- linux内核设计与实现 epub_Epoll学习服务器的简单实现-Linux内核Epoll结构
- BigDecimal与Long、int之间的互换
- 为什么大学要学一堆纸上谈兵的课程?(转)
- echart模块化单文件引入
- TTL和CMOS的区别
- 盲盒商城源码|盲盒商城app开发的模式玩法、功能以及开发流程介绍,多套盲盒源码现成案例。让您在了解盲盒项目开发中少走弯路,少踩坑。
- 含参变量正常积分_含参变量的积分
- MySQL 行级锁(行锁、临键锁、间隙锁)
- 项目从.Net3.5转化到.Net4.0发生错误
- 后台管理系统开发流程
- Poisoning Deep Learning based Recommender Model in Federated Learning Scenarios
- Maven---尚硅谷学习笔记Eclipse版
- 学习如何使用html和css样式将两张图片叠加到另一张图片上,实现微信扫一扫二维码效果
- Android10 SystemUI状态栏网络图标流程分析
- 大数据Hadoop之——总结篇
- 复杂网络分析(5)----共引和文献耦合
- B+树与B树的不同及B+树的特点
- 矿大计算机学院国奖公示,中国矿大学子在2020年中国大学生计算机设计大赛省级赛中荣获特等奖...