您的当前位置:首页正文

【学习笔记】mongodb的使用(二)flask项目使用mongodb实现人员管理系统

2024-11-09 来源:个人技术集锦

再次进入虚拟环境:
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》

Top