美文网首页Python点滴
[Python常用库]shelve

[Python常用库]shelve

作者: 蓝色信仰 | 来源:发表于2015-08-03 10:04 被阅读1754次

    shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据,关于pickle的用法参考[Python常用库]pickle

    简单来说,使用者可以将一个列表、字典、或者用户自定义的类实例保存到shelve中,下次需要用的时候直接取出来,就是一个Python内存对象,不需要像传统数据库一样,先取出数据,然后用这些数据重新构造一遍所需要的对象。下面是简单示例:

    import shelve
    
    
    def test_shelve():
        # open 返回一个Shelf类的实例
        #
        # 参数flag的取值范围:
        #  'r':只读打开
        #  'w':读写访问
        #  'c':读写访问,如果不存在则创建
        #  'n':读写访问,总是创建新的、空的数据库文件
        #
        # protocol:与pickle库一致
        # writeback:为True时,当数据发生变化会回写,不过会导致内存开销比较大
        d = shelve.open('shelve.db', flag='c', protocol=2, writeback=False)
        assert isinstance(d, shelve.Shelf)
    
        # 在数据库中插入一条记录
        d['abc'] = {'name': ['a', 'b']}
        d.sync()
    
        print d['abc']
    
        # writeback是False,因此对value进行修改是不起作用的
        d['abc']['x'] = 'x'
        print d['abc']  # 还是打印 {'name': ['a', 'b']}
    
        # 当然,直接替换key的value还是起作用的
        d['abc'] = 'xxx'
        print d['abc']
    
        # 还原abc的内容,为下面的测试代码做准备
        d['abc'] = {'name': ['a', 'b']}
        d.close()
    
        # writeback 为 True 时,对字段内容的修改会writeback到数据库中。
        d = shelve.open('shelve.db', writeback=True)
    
        # 上面我们已经保存了abc的内容为{'name': ['a', 'b']},打印一下看看对不对
        print d['abc']
    
        # 修改abc的value的部分内容
        d['abc']['xx'] = 'xxx'
        print d['abc']
        d.close()
    
        # 重新打开数据库,看看abc的内容是否正确writeback
        d = shelve.open('shelve.db')
        print d['abc']
        d.close()
    

    原文地址:http://www.isware.cn/python-modules/01-data-persistence-and-exchange/shelve/

    相关文章

      网友评论

        本文标题:[Python常用库]shelve

        本文链接:https://www.haomeiwen.com/subject/xvjvqttx.html