zoukankan      html  css  js  c++  java
  • 下午不想写代码了,写个shelve的模块使用(简单实用的小型数据库)。

    概念:不需要关系数据库时,可以用shelve模块作为持久存储Python对象的一个简单的选择。类似与字典,shelf按键访问,值将被腌制并写至由dbm创建和管理的数据库

    我的理解,Python操作的时候像字典,类型感觉跟MongoDB比较像。

    进过实际测试,

    import shelve
    
    class A:
        pass
    
    a = A()
    a.name = 'sidian'
    
    # 通过shelve.open打开一个文件,创建一个对象
    s = shelve.open('test.dat',writeback=False)
    # print(dir(s))
    '''
    ['_MutableMapping__marker', '__abstractmethods__', '__class__', '__contains__', '__del__', '__delattr__', 
    '__delitem__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', 
    '__exit__', '__format__', '__ge__', '__getattribute__', '__getitem__', 
    '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', 
    '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__',
     '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__setitem__', 
     '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__weakref__', 
     '_abc_impl', '_protocol', 'cache', 'clear', 'close', 'dict', 'get', 'items',
      'keyencoding', 'keys', 'pop', 'popitem', 'setdefault', 'sync', 'update', 
      'values', 'writeback']
    '''
    # 从上面可以看到,基本的方法还是比较全的跟字典基本差不多
    
    # print(s['x'])
    # print(s['a'].age)
    s['a'] = a
    s['x'] = ['a', 'b', 'c']
    print(s['x'])
    # 假如我像更新s['x']默认要这么操作
    s_temp = s['x']
    s_temp.append('d')
    s['x'] = s_temp
    
    print(s['x'])
    s.close()
    
    '''
    默认的,打开的shelf不会跟踪对可变对象的修改。,所以当一个shelf中的一个元素的内容发生变化,
    必须通过重新赋值的方式来显式更新
    
    也可以通过将writeback设置为True,那样shelf使用内存中的缓存以记住从数据库获取的所有对象。
    shelf关闭时每个缓存对象也被写回到数据库。
    
    尽管这会减少程序员犯错的机会,并且使对象持久存储更透明,但是并非所有的情况都有必要使用写回模式。
    打开shelf时缓存会消耗额外的内存,关闭shelf时会暂停将各个缓存对象写回到数据库,这会减慢应用的速度。
    所有缓存的对象都要写回数据库,因为无法区分它们是否修改。如果应用读取的数据多余写的数据,那么写回就会
    影响性能而没有太大的意义
    '''
    
    ['a', 'b', 'c']
    ['a', 'b', 'c', 'd']
    

     参数里面还有一个flag,可以标记只读,读写等模式,默认是读写的。

    还是非常简单实用的小模块。

    参考的国内链接:

    https://www.cnblogs.com/sui776265233/p/9225164.html

    https://blog.csdn.net/u012145252/article/details/80028146

    https://www.jianshu.com/p/e6f0fbc2eabe

  • 相关阅读:
    kubernetes 用到的工具及组件
    kubernetes整个基础环境的准备
    docker可视化管理Portainer
    Docker Swarm的命令
    Docker网络设置及文件挂载
    Docker常见命令
    Docker 中国官方镜像加速
    Docker安装
    k8s中教你快速写一条yaml文件
    Kubernetes CoreDNS 状态是 CrashLoopBackOff 报错
  • 原文地址:https://www.cnblogs.com/sidianok/p/11898865.html
Copyright © 2011-2022 走看看