#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.訪問變數的語句所在的函式被宣告為被訪問變數所在類...