本文共 3245 字,大约阅读时间需要 10 分钟。
本教程目录:
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+1 para_dict['id'] = this_id try: 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 False return 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》
转载地址:http://qtten.baihongyu.com/