zoukankan      html  css  js  c++  java
  • 简单的一个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)

      结果:

  • 相关阅读:
    【tarjan】BZOJ 1051:受欢迎的牛
    【递推】BZOJ 1088: [SCOI2005]扫雷Mine
    【计算几何】多边形
    【贪心】Bzoj 2457:[BeiJing2011]双端队列
    【单调栈】Bzoj 1012: 最大数maxnumber
    [洛谷P3584] POI2015 LAS
    [洛谷P4049] JSOI2007 合金
    [51nod1533] 一堆的堆
    [AGC018E] Sightseeing Plan
    [CF1065E] Side Transmutations
  • 原文地址:https://www.cnblogs.com/paulwhw/p/9090785.html
Copyright © 2011-2022 走看看