Contents
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'是字节序列。