簡單的一個MySQL類的實現:
阿新 • • 發佈:2018-05-26
ges 方法 自動 分享圖片 == PE 生成 bubuko 隨機
‘‘‘
定義MySQL類:
1.對象有id、host、port三個屬性
2.定義工具create_id,在實例化時為每個對象隨機生成id,保證id唯一
3.提供兩種實例化方式,方式一:用戶傳入host和port 方式二:從配置文件中讀取host和port進行實例化
4.為對象定制方法,save和get_obj_by_id,save能自動將對象序列化到文件中,文件路徑為配置文件中DB_PATH,文件名為id號,保存之前驗證對象是否已經存在,若存在則拋出異常;get_obj_by_id方法用來從文件中反序列化出對象
‘‘‘
代碼:
import time import hashlib import osimport pickle import random import settings class MySQL: BASE_DIR = os.path.dirname(os.path.abspath(__file__)) def __init__(self,host,port): self.host = host self.port = port #註意返回的是int型的,需要轉化為str類型 self.id = str(self.create_id()) def create_id(self):return random.randint(1,5555) #或者用下面的生成時間戳的MD5編碼 # m = hashlib.md5(str(time.time()).encode(‘utf-8‘)) # return m.hexdigest() def save(self): file_name = os.path.join(self.BASE_DIR,‘DB_PATH‘,str(self.id)) #os.walk方法——files為文件夾下的文件名列表 for root,dirs,files inos.walk(os.path.join(self.BASE_DIR,‘DB_PATH‘)): if self.id in files: raise FileNotFoundError(‘文件已存在!‘) with open(file_name,‘wb‘) as f: pickle.dump(self,f) print(‘文件已保存‘.center(50, ‘*‘)) def get_obj_by_id(self,id): file_name = os.path.join(self.BASE_DIR, ‘DB_PATH‘,str(id)) with open(file_name,‘rb‘) as f: #pickle的load方法 data = pickle.load(f) return data if __name__ == ‘__main__‘: mysql = MySQL(settings.HOST,settings.PORT) print(‘文件初始化的數據‘.center(50, ‘*‘)) print(mysql.host) print(mysql.port) print(mysql.id) mysql.save() data = mysql.get_obj_by_id(mysql.id) print(‘文件中讀出來的數據‘.center(50,‘*‘)) print(data.host) print(data.port) print(data.id)
結果:
簡單的一個MySQL類的實現: