python 连接MongoDB并进行增删改查操作

9 篇文章 0 订阅
3 篇文章 0 订阅
#!/usr/bin/env python
# coding=utf-8

import pymongo
from pymongo import MongoClient
from pymongo.errors import DuplicateKeyError
# 1. 导入MongoClient
# 首先,需要一个类,把对数据库的增删改查操作封装为一个接口
# 该类的名名字随便期
class Mongo(object):

    # 初始化,就是连接数据库
    # port:必须是个整数,不能加引号变成字符串
    def __init__(self, host='127.0.0.1', port=47017):
        self.client = MongoClient(host, port)

    # 插入数据
    def insert(self, database, collection, document):
        """
        :param database:  表示哪个数据库
        :param collection: 表示哪个表
        :param document:   表示哪个记录
        :return:
        """
        # 1. 连接数据库
        _database = self.client.get_database(database)
        # 2.连接该库下面要操作的表
        _collection = _database.get_collection(collection)
        # 给表里插入一条数据
        result = _collection.insert_one(document)
        # 插入数据后,返回的是什么数据类型?数据是什么?下面打印出来看看
        # print(type(result))  # <class 'pymongo.results.InsertOneResult'>
        # print(dir(result))
        # print(result)  # <pymongo.results.InsertOneResult object at 0x033A4DF0>
        # print(result.inserted_id)  # 插入成功后返回的一个id
        # print(result.acknowledged)  # 判断有没有插入成功,成功True,失败:False

    def insert(self, database, collection, document):
        try:
            _database = self.client.get_database(database)
            _collection = _database.get_collection(collection)
            #  如果document 是个字典,说明就是一个值,就可以用insert_one()
            # isinstance:是python里的函数,判断一个对象是个个字典,还是个列表
            if isinstance(document, dict):
                result = _collection.insert_one(document)
                # 如果插入成功就返回一个result.acknowledged
                return result.acknowledged
            elif isinstance(document, list):
                result = _collection.insert_many(document)
                return result.acknowledged
            else:
                return False
        except DuplicateKeyError:
            return False

    # def search(self, database, collection, filter):
    #     """
    #     :param database:   数据库
    #     :param collection: 表
    #     :param filter:     查询条件,查询条件必须是个字典
    #     :return:
    #     """
    #     # 同理:先获取数据库
    #     # 再得到表
    #     # 最后就可以用该表去查找了
    #     _database = self.client.get_database(database)
    #     _collection = _database.get_collection(collection)
    #     # 把查询结果转化成列表
    #     results = list(_collection.find(filter))
    #     print(type(results))  # <class 'pymongo.cursor.Cursor'>
    #     print(dir(results))
    #     print(results)
    #     # 将查询结果return
    #     return results

    def search(self, database, collection, filter):
        """
        :param database:   数据库
        :param collection: 表
        :param filter:     查询条件,查询条件必须是个字典
        :return:
        """
        # 同理:先获取数据库
        # 再得到表
        # 最后就可以用该表去查找了
        _database = self.client.get_database(database)
        _collection = _database.get_collection(collection)
        # 把查询结果转化成列表
        results = list(_collection.find(filter))
        # print(type(results))  # <class 'pymongo.cursor.Cursor'>
        # print(dir(results))
        print(results)
        # 将查询结果return
        return results

    def delete(self, database, collection, filter):
        # filter: 删除的条件
        _database = self.client.get_database(database)
        _collection = _database.get_collection(collection)
        result = _collection.delete_many(filter)
        # print(result.acknowledged)
        return result.acknowledged

    def update(self, database, collection, filter, document_to):
        _database = self.client.get_database(database)
        _collection = _database.get_collection(collection)
        # filiter: 更新的条件
        # update:第二个参数:即是否要更新的数据。即用update去更新那些符合filter条件的数据
        # 更新的操作:要更新的数据,首先是个字典,字典里面的格式为:{"$set":要更新的内容}
        result = _collection.update_many(filter, {"$set": document_to}, upsert=True)
    def __del__(self):
        self.client.close()


if __name__ == '__main__':
    mongo = Mongo()
    for i in range(1,40):
        data = {'_id': i,"name": '香蕉',"age": 25}
        # 如果指定了插入时的id值,就会用你指定的值,如果没有指定id值,插入后就会自动有个ObjectId("5bb9bc6aa236ce29f4898035")
        # 插入数据
        # 'trade_center':要插入的库,如果不存在,mongoDB会自动帮你创建这个库
        # 'users':表,如果不存在,MongoDB会自动帮你创建表
        # data: 要插入到 trade_center库下面的users表里的数据
        mongo.insert('mydb', 'mongod2', data)

    # 定义查询条件,查询条件必须是个字典
    # 像下面的写法,是and的关系
    # filter = {"name": "橙子" } #注意:查询条件里,如果值是int等类型时,不能加“”,否则就会查不到数据,同理,删除/更新也是一样的
    # mongo.search('mydb', 'mongod', filter)

    # # 删除的条件,如果值是整数,不能加引号
    # filter = {"name": "草莓"  }
    # mongo.delete('mydb', 'mongod', filter)

    #filter:条件
    # filter = {"name": "橙子"}
    #  #要更新成的数据
    # document_to = {"name": "草莓","age": 10}
    # mongo.update('mydb', 'mongod', filter, document_to)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值