自定义Mongodb的操作接口

5 篇文章 0 订阅
1 篇文章 0 订阅

自定义Mongodb的操作接口

from pymongo import MongoClient


class MongoAPI(object):
    def __init__(self, db_name, table_name, host="127.0.0.1", port=27017):
        self.db_name = db_name
        self.table_name = table_name
        self.host = host
        self.port = port
        self.conn = MongoClient(host=self.host, port=self.port)
        self.db = self.conn[self.db_name]
        self.table = self.db[self.table_name]

    def get_one(self, query):
        # 获取一个指定的值,并且将_id字段不返回
        return self.table.find_one(query, projection={'_id': False})

    def get_query_all(self, query):
        # 返回符合查询条件的所有值
        return self.table.find(query)

    def get_all(self):
        # 返回所有数据
        return self.table.find({})

    def add(self, kv_dict):
        # 插入一个字典值
        return self.table.insert_one(kv_dict)

    def delete(self, query):
        # 删除指定条件的所有值
        return self.table.delete_many(query)

    def is_exist(self, query):
        # 判断是否有值满足当前的查询条件
        ret = self.table.find_one(query)
        return ret is not None

    def update(self, query, kv_dict):
        # 更新记录,如果没有就会插入
        self.table.update_one(query, {
            '$set': kv_dict,
        }, upsert=True)

    def q_sort(self,column, order=1, query={}):
        # 查询结果后,按照column进行排序通过order来进行排序,默认为升序order:1,返回所有数据 降序为-1,
        return self.table.find(query).sort(column, order)


if __name__ == '__main__':
    ma = MongoAPI(db_name='Student', table_name="16jixinan")
    students = [{'id': 1, 'name': 'hhf', 'age': 22, 'hobby': ['足球', '篮球']},
                {'id': 2, 'name': 'jyf', 'age': 26, 'hobby': ['wzry', '篮球']},
                {'id': 25, 'name': 'pjl', 'age': 15, 'hobby': ['ship', '篮球']}]
    for student in students:
        # 去重插入
        ma.update({'id': student.get('id')}, student)

    students_all = ma.get_all()
    for student in students_all:
        print(student)
    print('--'*20)
    student_sort = ma.q_sort('age') # 按照age进行升序排序
    for student in student_sort:
        print(student)
    print('--' * 20)
    student_is_exist = ma.is_exist({'name': 'hhf'}) # 判读满足条件的记录是否存在
    print(student_is_exist)
    student_is_exist = ma.is_exist({'name': 'ww'})
    print(student_is_exist)

    ma.delete({'id': 2})  # 删除id为2的值

测试结果:

{'_id': ObjectId('5e96be7b8c584f65c8d0c35d'), 'id': 1, 'name': 'hhf', 'age': 22, 'hobby': ['足球', '篮球']}
{'_id': ObjectId('5e96be7b8c584f65c8d0c35f'), 'id': 25, 'name': 'pjl', 'age': 15, 'hobby': ['ship', '篮球']}
{'_id': ObjectId('5e96c44ab7333bc6ed6683be'), 'id': 2, 'age': 26, 'hobby': ['wzry', '篮球'], 'name': 'jyf'}
----------------------------------------
{'_id': ObjectId('5e96be7b8c584f65c8d0c35f'), 'id': 25, 'name': 'pjl', 'age': 15, 'hobby': ['ship', '篮球']}
{'_id': ObjectId('5e96be7b8c584f65c8d0c35d'), 'id': 1, 'name': 'hhf', 'age': 22, 'hobby': ['足球', '篮球']}
{'_id': ObjectId('5e96c44ab7333bc6ed6683be'), 'id': 2, 'age': 26, 'hobby': ['wzry', '篮球'], 'name': 'jyf'}
True
False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值