1. 程式人生 > >簡單的一個MySQL類的實現:

簡單的一個MySQL類的實現:

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 os
import 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 in
os.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類的實現: