mongodb (封装一个类,实现 增、删、改、查 )直接调用即可

利用python魔法方法实现此类

import pickle
import zlib
from datetime import datetime,timedelta
from pymongo import MongoClient
from bson.binary import Binary


class MongoCache(object):
    """
    数据库缓存
    """
    def __init__(self,client=None,expires=timedelta(days=30)):
        self.client = MongoClient("localhost",27017)
        self.db = self.client.cache
        #加速查找设置索引,设置超时时间,如果达到expireAfterSeconds设置的超时时间,mongodb会把超时数据自动删除
        self.db.webpage.create_index('timestamp',expireAfterSeconds=expires.total_seconds())


    def __setitem__(self, key, value):
        #压缩数据,设置时间戳
        record = {"result":Binary(zlib.compress(pickle.dumps(value))),"timestamp":datetime.utcnow()}
        #使用update的upsert(如果不存在执行insert,存在执行update)参数进行插入更新操作,$set内置函数表示覆盖原始数据
        self.db.webpage.update({"_id":key},{'$set':record},upsert=True)

    def __getitem__(self, item):
        #根据_id以item作为关键字(例如url:http://www.baidu.com)查找相关网页
        record = self.db.webpage.find_one({"_id":item})
        if record:
            return pickle.loads(zlib.decompress(record["result"])) #解压缩
        else:
            raise KeyError(item + "does not exist")#找不到抛出异常

    def __contains__(self, item):
        try:
            self[item] #这里会调用__getitem__方法
        except KeyError:
            return False #捕获到KeyError异常说明没找到相关数据,参考33行抛出异常的条件
        else:
            return True #找到相应数据说明数据库包含下载内容

    def clear(self):
        self.db.webpage.drop() #把缓存库清空

用法举例

if __name__ == '__main__':
    # 实例化类
    mongo = MongoCache()
    # 添加数据
    mongo['insert'] = 'insert'
    # 查找数据
    print(mongo['insert'])

此链接 会利用该类实现一个较为完整的爬虫
参考:https://blog.csdn.net/qq_42847500/article/details/85238141

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 下面是一个使用 Python 和 PyMongo 库连接和操作 MongoDB 数据库的的示例: ```python import pymongo class MongoDB: def __init__(self, host='localhost', port=27017, username=None, password=None): # 建立连接 self.client = pymongo.MongoClient(host=host, port=port) # 如果有用户名和密码,则进行身份验证 if username and password: self.client.admin.authenticate(username, password) def get_database(self, db_name): # 获取数据库 return self.client[db_name] def get_collection(self, db_name, coll_name): # 获取数据库的集合 return self.client[db_name][coll_name] def insert_one(self, db_name, coll_name, doc): # 插入单条文档 return self.client[db_name][coll_name].insert_one(doc) def insert_many(self, db_name, coll_name, docs): # 插入多条文档 return self.client[db_name][coll_name].insert_many(docs) def update_one(self, db_name, coll_name, filter, update): # 更新单条文档 return self.client[db_name][coll_name].update_one(filter, update) def update_many(self, db_name, coll_name, filter, update): # 更新多条文档 return self.client[db_name][coll_name].update_many(filter, update) def delete_one(self, db_name, coll_name, filter): # 除单条文档 return self.client[db_name][coll_name].delete_one(filter) def delete_many(self, db_name, coll_name, filter): # 除多条文档 return self.client[db_name][coll_name].delete_many(filter) def find_one(self, db_name, coll_name, filter): # 询单条文档 return self.client[db_name][coll_name].find_one(filter) def find(self, db_name, coll_name, filter, projection=None, sort=None, limit=0, skip=0): # 询多条文档 cursor = self.client[db_name][coll_name]. ### 回答2: 使用Python编写一个可以进行Mongo数据库的操作的,包含分页询功能,代码如下: ```python from pymongo import MongoClient class MongoCRUD: def __init__(self, host, port, database, collection): self.client = MongoClient(host, port) self.db = self.client[database] self.collection = self.db[collection] def create(self, data): """ 创建文档 """ self.collection.insert_one(data) def read(self, query={}, page=None, limit=None): """ 询文档 """ if page is not None and limit is not None: skip = (page - 1) * limit result = self.collection.find(query).skip(skip).limit(limit) else: result = self.collection.find(query) return list(result) def update(self, query, update_data): """ 更新文档 """ self.collection.update_many(query, {'$set': update_data}) def delete(self, query): """ 除文档 """ self.collection.delete_many(query) ``` 使用示例: ```python mongo = MongoCRUD('localhost', 27017, 'mydatabase', 'mycollection') # 创建文档 data = {'name': 'Alice', 'age': 25} mongo.create(data) # 询文档 result = mongo.read({'age': {'$lte': 30}}, page=1, limit=10) for doc in result: print(doc) # 更新文档 query = {'name': 'Alice'} update_data = {'age': 26} mongo.update(query, update_data) # 除文档 query = {'name': 'Alice'} mongo.delete(query) ``` 以上代码实现一个可以进行Mongo数据库的操作的,并包含了分页询功能。在初始化时,需要传入MongoDB的主机地址、端口号、数据库名称和集合名称。然后通过调用的方法实现文档的操作。在询时,可以通过`page`和`limit`参数指定询的页码和每页显示的数量,实现分页询功能。 ### 回答3: 在Python中可以使用pymongo库进行MongoDB数据库的操作,并结合分页功能。下面是一个示例的实现了MONGO数据库的以及分页询的功能。 ```python from pymongo import MongoClient from math import ceil class MongoCRUD: def __init__(self, db_name, collection_name): self.client = MongoClient() # 连接MongoDB self.db = self.client[db_name] # 选择数据库 self.collection = self.db[collection_name] # 选择集合 # 插入数据 def insert_data(self, data): result = self.collection.insert_one(data) return result.inserted_id # 除数据 def delete_data(self, query): result = self.collection.delete_many(query) return result.deleted_count # 更新数据 def update_data(self, query, update): result = self.collection.update_many(query, {"$set": update}) return result.modified_count # 询数据 def find_data(self, query, page_size, page_num): total = self.collection.count_documents(query) # 获取总数据量 total_pages = int(ceil(total/page_size)) # 计算总页数 skip = page_size * (page_num - 1) # 计算需要跳过的数据量 data = list(self.collection.find(query).skip(skip).limit(page_size)) # 分页询数据 return data, total_pages # 示例用法 if __name__ == "__main__": db_name = "test_database" collection_name = "test_collection" crud = MongoCRUD(db_name, collection_name) # 插入数据 data = {"name": "Alice", "age": 25} inserted_id = crud.insert_data(data) print("插入数据的ID:", inserted_id) # 更新数据 query = {"name": "Alice"} update = {"age": 26} modified_count = crud.update_data(query, update) print("更新数据的数量:", modified_count) # 除数据 query = {"name": "Alice"} deleted_count = crud.delete_data(query) print("除数据的数量:", deleted_count) # 询数据 query = {} page_size = 10 # 每页数据量 page_num = 2 # 当前页码 data, total_pages = crud.find_data(query, page_size, page_num) print("询结果:", data) print("总页数:", total_pages) ``` 这个封装MongoDB操作,并提供了分页询的功能。通过调用相应的方法,可以实现对Mongo数据库的数据进行加、除、更新和询等操作,并且支持分页询,可以指定每页数据量和当前页码。在示例用法中,我们演示了如何使用该进行基本的数据操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_42847500

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值