封裝乙個快取類,在爬取時可以呼叫,儲存在資料庫中

2021-09-25 06:08:16 字數 1803 閱讀 2000

#

coding=utf-8

import

pickle

import

zlib

from datetime import

datetime,timedelta

import

requests

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):

'''timestamp:時間戳

:param key:

:param value:

:return:

'''#

壓縮資料,設定時間戳

record =

#使用update的upsert(如果不存在執行insert,存在執行update引數進行插入更新操作),$set內建函式表示覆蓋原始資料

self.db.webpage.update(,,upsert=true)

def__getitem__

(self, item):

# record = self.db.webpage.find_one()

ifrecord:

#return pickle.dumps(zlib.decompress(record["result"])) #解壓縮

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 #

else

:

return true #

defclear(self):

self.db.webpage.drop()

#把快取庫清空

if__name__=='

__main__':

mongocache =mongocache()

url = '

'response =requests.get(url)

mongocache[url] = response.content

乙個封裝好的SqlHelper類庫,可以直接使用

用習慣了entity framework有時會突然不會用ado.net直接訪問資料了,今天總結了乙個sqlhelper類庫,以後不會了直接上來看就ok.很簡單,一看就懂,沒有使用dataset,而使用了更輕便,簡潔的datatable.說明 資料庫助手類 using system using sys...

乙個封裝好的SqlHelper類庫,可以直接使用

用習慣了entity framework有時會突然不會用ado.net直接訪問資料了,今天總結了乙個sqlhelper類庫,以後不會了直接上來看就ok.很簡單,一看就懂,沒有使用dataset,而使用了更輕便,簡潔的datatable.說明 資料庫助手類 using system using sys...

vc 在乙個類中呼叫另乙個類的變數

有幾個前提條件 1.被引用的變數所在類必須被完整地定義,而不是只有前向宣告 例如只是一行class a 2.被引用的變數必須是引用處可訪問的。也就是說,以下條件至少滿足其中之一 2.1.訪問變數的語句所在的類被宣告為被訪問的變數所在類的友元類 2.2.訪問變數的語句所在的函式被宣告為被訪問變數所在類...