• shelve模块


    #coding:utf-8
    __author__ = 'similarface'
    #email:similarface@outlook.com
    '''
    shelve模块:
    映射容器
    存储对象,被存储的对象都会被序列化并且被写入文件
    反序列化然后从文件获取任意对象
    
    method:shelve.open()
    'r'	Open existing database for reading only (default)
    'w'	Open existing database for reading and writing
    'c'	Open database for reading and writing, creating it if it doesn’t exist
    'n'	Always create a new, empty database, open for reading and writing
    '''
    import shelve
    import logging
    logging.basicConfig(level=logging.DEBUG)
    console = logging.StreamHandler()
    logging.getLogger('').addHandler(console)
    class Person:
        '''
        定义个简单的类
        '''
        def __init__(self,name,*posts):
            self.name=name
    
        def as_dict(self):
            return dict(name=self.name,underline="="*len(self.name),)
    
    p1=Person(name='Tom')
    #创建shelf对象
    shelf=shelve.open('person')
    #设置键
    p1._id='person:1'
    #存储
    shelf[p1._id]=p1
    
    #获取
    p=shelf[p1._id]
    logging.info(p)
    logging.info(p.name)
    logging.info(p._id)
    logging.info(list(shelf.keys()))
    shelf.close()
    #获取存储对象
    shelf=shelve.open('person')
    #获取指定的对象 根据类和属性来获取
    results=(shelf[k] for k in shelf.keys() if k.startswith('person:') and shelf[k].name=='Tom' )
    #logging.info(list(results))
    for i in results:
        r0=i
        logging.info(r0._id)
        logging.info(r0.name)
    
    '''
    INFO:root:<__main__.Person instance at 0x00000000026DBAC8>
    <__main__.Person instance at 0x00000000026DBAC8>
    INFO:root:Tom
    Tom
    INFO:root:person:1
    person:1
    INFO:root:['person:1']
    ['person:1']
    INFO:root:person:1
    person:1
    INFO:root:Tom
    Tom
    '''
    
    
    '''
    存在继承的对象的持久化
    使用外键引用对象
    '''
    
    
    
    import datetime
    class Teacher:
        def __init__(self,profession,name,desc,tags):
            self.profession=profession
            self.name=name
            self.desc=desc
            self.tags=tags
    
        def as_dict(self):
            return dict(
                profession=self.profession,
                name=self.name,
                underline="-"*len(self.name),
                desc=self.desc,
                tags=" ".join(self.tags)
            )
    
    t1=Teacher('math','Lucy','beauifu teacher',['senior'])
    t2=Teacher('english','Tom','Stronger',['lower'])
    
    import shelve
    shelf=shelve.open('person')
    owner=shelf['person:1']
    t1._parent=owner._id
    t1._id=t1._parent+':teacher:1'
    shelf[t1._id]=t1
    
    t2._parent=owner._id
    t2._id=t2._parent+':teachar:2'
    shelf[t2._id]=t2
    
    logging.info(list(shelf.keys()))
    logging.info(t1._parent)
    logging.info(t2._id)
    
    '''
    INFO:root:['person:1:teachar:2', 'person:1', 'person:1:teacher:1']
    ['person:1:teachar:2', 'person:1', 'person:1:teacher:1']
    INFO:root:person:1
    person:1
    INFO:root:person:1:teachar:2
    person:1:teachar:2
    '''
    

      

  • 相关阅读:
    demo_38 关注页导航栏实现
    demo_37 评论列表实现_02 封装popup 及 格式化时间
    demo_37 评论列表实现_01
    SaaS
    rsyncd脚本
    rsyncd
    MySQL高可用--MHA安装
    正向代理
    zabbix 一键部署
    kvm安装
  • 原文地址:https://www.cnblogs.com/similarface/p/5573195.html
Copyright © 2020-2023  润新知