简单的一个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)

  结果:

posted on 2018-05-25 21:41  江湖乄夜雨  阅读(878)  评论(0编辑  收藏  举报