在python的应用程序中,不需要关系型数据库时,如MySQL可以使用python提供的持久字典dbm来存储名称和值(键值对)

转载自http://www.cnblogs.com/hongten/p/hongten_python_dbm.html


'''
    在python的应用程序中,不需要关系型数据库时,如MySQL
    可以使用python提供的持久字典dbm来存储名称和值(键值对)
    这个类似于java的中的java.util.Map对象。
    区别如下:

        存储在硬盘上面
        dbm的键值对必须是字符串类型

    python支持的dbm模块

        dbm         -- 常用的dbm模块
        dbm.dumb    -- 可移植的,简单的dbm库
        dbm.gnu     -- GNU dbm库

    创建一个dbm对象
    db = dbm.open('c:\\test\\Hongten.pag', 'c')

        '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 does'n exist
        'n'         --  always creat a new,empty database,open for reading and writing

    给dbm对象赋值,dbm中的键值对都是以字符串形式出现
    db['name'] = 'Hongten'
    db['gender'] = 'M'

    保存,在dbm对象关闭的时候即可保存数据
    db.close()

    删除值:
    del db['name']
    会把db对象中的key = 'name'的值删除

    遍历整个db对象:
    for key in db.keys():
        print(key)
    
'''

运行效果:

运行后,会在:c:\test目录下面出现:

Hongten.pag.bak

Hongten.pag.dat

Hongten.pag.dir

三个文件

输出部分:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
保存数据...
##################################################
遍历所有数据...
b'name' = b'Hongten'
b'gender' = b'M'
b'address' = b'\xe5\xb9\xbf\xe4\xb8\x9c\xe7\x9c\x81\xe5\xb9\xbf\xe5\xb7\x9e\xe5\xb8\x82'
##################################################
获取[name]键值对数据...
b'Hongten'
##################################################
删除[gender]键值对数据...
遍历所有数据...
b'name' = b'Hongten'
b'address' = b'\xe5\xb9\xbf\xe4\xb8\x9c\xe7\x9c\x81\xe5\xb9\xbf\xe5\xb7\x9e\xe5\xb8\x82'
##################################################
删除所有键值对数据...
遍历所有数据...
>>>

============================================

代码部分:

============================================

#python dbm

#Author : Hongten
#MailTo : hongtenzone@foxmail.com
#QQ     : 648719819
#Blog   : http://www.cnblogs.com/hongten
#Create : 2013-08-09
#Version: 1.0

import dbm
'''
    在python的应用程序中,不需要关系型数据库时,如MySQL
    可以使用python提供的持久字典dbm来存储名称和值(键值对)
    这个类似于java的中的java.util.Map对象。
    区别如下:

        存储在硬盘上面
        dbm的键值对必须是字符串类型

    python支持的dbm模块

        dbm         -- 常用的dbm模块
        dbm.dumb    -- 可移植的,简单的dbm库
        dbm.gnu     -- GNU dbm库

    创建一个dbm对象
    db = dbm.open('c:\\test\\Hongten.pag', 'c')

        '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 does'n exist
        'n'         --  always creat a new,empty database,open for reading and writing

    给dbm对象赋值,dbm中的键值对都是以字符串形式出现
    db['name'] = 'Hongten'
    db['gender'] = 'M'

    保存,在dbm对象关闭的时候即可保存数据
    db.close()

    删除值:
    del db['name']
    会把db对象中的key = 'name'的值删除

    遍历整个db对象:
    for key in db.keys():
        print(key)
    
'''

db = dbm.open('c:\\test\\Hongten.pag', 'c')

def get_dbm():
    '''Open database, creating it if necessary.'''
    return dbm.open('c:\\test\\Hongten.pag', 'c')

def save(db):
    '''保存数据'''
    print('保存数据...')
    db['name'] = 'Hongten'
    db['gender'] = 'M'
    db['address'] = '广东省广州市'
    db.close()

def fetchall(db):
    '''遍历所有'''
    print('遍历所有数据...')
    if db is not None:
        for key in db.keys():
            print('{} = {}'.format(key, db[key]))
    else:
        print('dbm object is None!')

def fetchone(db, key):
    '''获取某个键值对'''
    print('获取[{}]键值对数据...'.format(key))
    if db is not None:
        print(db[key])
    else:
        print('dbm object is None!')

def delete(db, key):
    '''删除某个键值对'''
    print('删除[{}]键值对数据...'.format(key))
    if db is not None:
        del db[key]
    else:
        print('dbm object is None!')

def deleteall(db):
    '''删除所有键值对'''
    print('删除所有键值对数据...')
    if db is not None:
        for key in db.keys():
            del db[key]
    else:
        print('dbm object is None!')

def main():
    db = get_dbm()
    save(db)
    print('#' * 50)
    db = get_dbm()
    fetchall(db)
    print('#' * 50)
    fetchone(db, 'name')
    print('#' * 50)
    delete(db, 'gender')
    fetchall(db)
    print('#' * 50)
    deleteall(db)
    fetchall(db)
    
if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值