13.1. Python操作NoSQL数据存储

13.1.1. dbm数据库的打开和关闭

与关系型数据库类似,dbm 数据库使用前需要打开, 使用完成需要关闭。打开数据库使用open() 函数, 它的语法如下:

dbm.open (file, flag= ' r ' )

参数file 是数据库文件名, 包括路径; 参数flag 是文件打开方式, flag 取值说明如下。

'r' : 以只读方式打开现有数据库, 这是默认值。
'w' : 以读写方式打开现有数据库。
'c': 以读写方式打开数据库, 如果数据库不存在则创建。
'n' : 始终创建一个新的空数据库, 打开方式为读写。

关闭数据库使用close() 函数,close() 函数没有参数, 使用起来比较简单。
但更推荐使用with as 语句块管理数据资源释放。示例代码如下:
with dbm.open (DBNAME, 'c')  as db :
    pass

使用with as 语句块后不再需要自己关闭数据库。

13.1.2. dbm数据存储

dbm数据存储方式类似于字典数据结构,通过键写入或读取数据,但需要注意的是dbm数据库保存的数据是字符串类型或者是字节序列(bytes)类型。 dbm数据存储相关的语句如下:

1)写入数据
d[key] = data

如果key不存在则创建key-data数据项,如果key已经存在则使用data覆盖旧数据

2)读取数据
data = d[key] 或 data = d.get(key,defaultvalue)
使用data=d[key]语句读取数据时,如果没有key对应的数据则会抛出KeyError异常。
为了防止这种情况的发生,可以使用data = d.get(key,defaultvalue)语句,
如果没有key对应的数据,则返回默认值defaultvalue

3)删除数据
del d[key]

4) 查找数据
flag = key in d

13.1.3. 示例代码

#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/5/22 12:27
# filename: python操作NOSQL数据类型.py
import dbm

with dbm.open('mydb', 'c') as db:
    db['name'] = 'hujianli'  # 更新数据
    print(db['name'].decode())  # 取出数据

    age = int(db.get('age', b'18').decode())  # 取出数据
    print(age)

    if 'age' in db:  # 判断是否存在age数据
        db['age'] = '20'  # 或者b'20'

    del db['name']  # 删除name数据
db['name']表达式取出的数据是字节序列,如果需要的是字符串则需要使用decode()方法将字节序列转换为字符串
表达式db.get('age', b'18')中默认值为b'18',b'18'是字节序列。