pymongo-基本操作2-插入与更新demo

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# @Author : CZW
# @Contact :  czw011122@163.com

import pymongo

MONGO_DB = "mongodb://localhost:27017/?authSource=test"


class SaveData:
    def __init__(self):

        # 连接mongo
        self.__mongo_conn = pymongo.MongoClient(MONGO_DB)  # 连接mongo
        mongo_conn_db = self.__mongo_conn.TEST

        self.mongo_famous = mongo_conn_db["famous"]

    def __del__(self):
        self.__mongo_conn.close()

    def insert_one_mongo(self, mongo_name, item, note=""):
        """
        :param mongo_name:库名
        :param item: 数据
        :param note: 数据说明
        :return:
        """
        try:
            mongo_name.insert_one(dict(item))
            print(note, item)
            return True
        except Exception as e:
            print("mongo_{}_{}_{}".format(note, item["_id"], self.error(str(e))))

    def update_one_mongo(self, mongo_name, id, item, note="", upsert=True):
        """
        :param mongo_name:库名
        :param id:数据id
        :param item: 数据
        :param note: 数据说明
        :param upsert: True如果数据找到了则修改数据,如果找不到就当做新数据插入,False如果数据找到了则修改数据,如果找不到就不管
        :return:
        """
        try:
            mongo_name.update_one({"_id": id}, {"$set": item}, upsert=upsert)
            return True
        except Exception as e:
            print("mongo_{}_{}_{}".format(note, id, self.error(str(e))))

    def error(self, e):
        if e.find("E11000 duplicate key error") != -1:
            return "插入失败,id已存在"
        elif e.find("document must be an instance of dict") != -1:
            return "文档必须是dict"
        elif e.find("field '_id' was found to have been altered to _id:") != -1:
            return "修改id出错,id不可修改!"
        elif e.find("update only works with $ operators") != -1:
            return "只适用于$操作符"
        else:
            return e


if __name__ == '__main__':
    s = SaveData()
    # 插入数据
    # s.insert_one_mongo(s.mongo_famous, item={"_id": 1, "name": "卢本伟"}, note="名人表插入")
    # s.insert_one_mongo(s.mongo_famous, item={"_id": 2, "name": "蔡徐坤"}, note="名人表插入")
    # s.insert_one_mongo(s.mongo_famous, item={"_id": 3, "name": "秦牛正威"}, note="名人表插入")

    # 修改数据
    # s.update_one_mongo(s.mongo_famous,id=1,item={"name":"阿巴阿巴","sex":1},note="名人表修改",upsert=False)
    # s.update_one_mongo(s.mongo_famous,id=6,item={"name":"李小明同学","sex":1},note="名人表修改",upsert=True)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值