簡單的一個MySQL類的實現:

'''
定義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

相關文章
相關標籤/搜索