本教程目录:

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实现人员管理系统相关推荐

  1. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  2. Vue学习笔记:使用CLI构建Vue项目

    Vue学习笔记:使用CLI构建Vue项目 一.安装Vue CLI 要用到集成在node.js里的npm来安装Vue CLI. 1.下载并安装node.js 2.配置node.js的环境变量 3.启动命 ...

  3. 【AngularJs学习笔记五】AngularJS从构建项目开始

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  4. Slicer学习笔记(四十二)slicer c++源码编译

    Slicer学习笔记(四十二)slicer c++源码编译 1.cmake生成项目 2.编译失败的原因汇总 2.1.下载代码失败 之前在windows下编译slicer,没有做笔记. 后面再次编译还会 ...

  5. Redis学习笔记②实战篇_黑马点评项目

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

  6. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

  7. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  8. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  9. Slicer学习笔记(六十二)slicer下导出模块接口

    Slicer学习笔记(六十二)slicer下导出模块接口 1. 参考文件实现 1. 参考文件实现 通过配置config_file为每一个生成类添加 Export,并为每个Module生成 Export ...

最新文章

  1. 二维几何变换---OpenGL几何变换编程示例
  2. Mysql初始化root密码和允许远程访问
  3. linux内核设计与实现 epub_Epoll学习服务器的简单实现-Linux内核Epoll结构
  4. BigDecimal与Long、int之间的互换
  5. 为什么大学要学一堆纸上谈兵的课程?(转)
  6. echart模块化单文件引入
  7. TTL和CMOS的区别
  8. 盲盒商城源码|盲盒商城app开发的模式玩法、功能以及开发流程介绍,多套盲盒源码现成案例。让您在了解盲盒项目开发中少走弯路,少踩坑。
  9. 含参变量正常积分_含参变量的积分
  10. MySQL 行级锁(行锁、临键锁、间隙锁)
  11. 项目从.Net3.5转化到.Net4.0发生错误
  12. 后台管理系统开发流程
  13. Poisoning Deep Learning based Recommender Model in Federated Learning Scenarios
  14. Maven---尚硅谷学习笔记Eclipse版
  15. 学习如何使用html和css样式将两张图片叠加到另一张图片上,实现微信扫一扫二维码效果
  16. Android10 SystemUI状态栏网络图标流程分析
  17. 大数据Hadoop之——总结篇
  18. 复杂网络分析(5)----共引和文献耦合
  19. B+树与B树的不同及B+树的特点
  20. 矿大计算机学院国奖公示,中国矿大学子在2020年中国大学生计算机设计大赛省级赛中荣获特等奖...

热门文章

  1. hive explode
  2. Java随机数控制范围
  3. linux ps1 目录颜色,Linux下PS1终端下的颜色设置
  4. 二十四、深入Python多进程multiprocessing模块
  5. 九、Golang并发和线程模型
  6. 一、前端必须掌握HTML的基础知识
  7. 基于flink+clickhouse构建亿级电商全端用户画像平台训练营
  8. 三面百度AI岗,炸了
  9. ICCV 2021 | 重铸Regression荣光!具有残差对数似然估计的人体姿态回归
  10. 工作之后,顶会还重要嘛?