JsonDB
jsonDB是一个基于JSON格式的内存数据库.它具有以下特点:
- 轻量级. 无守护进程,无需任何额外的安装和配置,你只需要
import jsonDb
即可使用,非常方便.- NOSQL. 类似于mongoDb的非关系型数据库.
- 内存数据库. 所有数据基于内存进行操作和访问,性能相对较高.目前版本的性能测试数据请
参考reference文档.- 任意迁移. 数据库可以完整导出为外部文件,并且可以从外部文件导入.基于此,数据库可以
进行任意的迁移,而无需做任何修改.- 灵活的数据类型. 一个数据集合(collection)中的数据,并不需要相同的格式.比如以下几种数据
可以同时存在于一个collection中:
{'key1':1},{'key2':'value','pic':'value'},{'key3':'value'}
JsonDB使用python语言实现,是一个github开源项目,遵循MIT的LICENCE,基本上可以不受限制用于任何用途。
该DB的接口大体模仿了mongoDB的风格,使用起来非常简单和顺手。
概念说明:
- db: 即数据库. 创建一个jsonDb类的实例,即是创建了一个数据库.可以指定dbname和hash的长度.
- collection: 数据集合(表). 一个collection可以理解为数据库中的一个表. collection不需要
单独创建,当insert第一条数据,或者ensureKey时,系统会自动创建.- data: 数据. collection中的一条数据,或者是一个数据的list. data必须是dict字典类型,是一个
key-value键值对.
关键词说明:
以下关键词属于系统保留,不能作为任何字典dict的key名.
$lt
$lte
$gt
$gte
$ne
$or
$or[0-9]
$jdb
$jdb_collections
$jdb_key
$jdb_hash
$jdb_coll
$jdb_hashSize
$jdb_md5
安装
- 从源码安装,首先从github下载源码,jsonDb源码下载地址
python setup.py install
- pypi直接安装,注意:本项目后续会上传到pypi,目前仅支持源码安装.
pip install jsonDb
Filter条件过滤器
很多操作会使用到Filter条件过滤器.比如,删除数据\更新数据\查询数据等.通过过滤器,我们可以指定更新一组满足一定条件的数据.
jsonDb提供了相对丰富和灵活的过滤器. 过滤器一般在方法的参数中使用filter来指定.
filter是一个dict,它包括key,value,逻辑表达式,条件表达式 几个部分.
filter={
'逻辑表达式':{key:{
'条件表达式':value}}}
逻辑表达式: 支持两种逻辑
- 逻辑或:
'$or'
'$or1'
'$or2'
…,,如果存在多个逻辑或,需要使用$or[0-9],例如:
filter={
'$or':{
'key1':value1, 'key2':value2,...}, '$or1':{
'key1':value1, 'key2':value2,...}, ...}
- 逻辑与: 没有特殊的关键字,没有使用逻辑或关键字的{}内的key之间就是逻辑与的关系,例如:
filter={
'key1':value1, 'key2':value2,...}
条件表达式: 条件表达式是用来表示key和value之间的关系
- 等于
{<key>:<value>}
- 小于
{<key>:{$lt:<value>}}
- 小于或等于
{<key>:{$lte:<value>}}
- 大于
{<key>:{$gt:<value>}}
- 大于或等于
{<key>:{$gte:<value>}}
- 不等于
{<key>:{$ne:<value>}}
Filter支持任意嵌套,这样使用起来会非常灵活.如下:
filter={
'$or':{
'key1':value1, '$or':{
'key1':value1, '$or1':{
'key1':value1, 'key2':value2,...},...},...},
'$or1':{
'key1':value1, 'key2':value2,...}, ...}
功能说明:
创建数据库
实例化一个JSONDB类实例,即创建一个数据库.我们重载了__str__
方法,所以可以通过print
直接查看数据库的统计信息.
>>> from jsonDb.database import JSONDB
>>> myDb = JSONDB('USER_DB')
>>> print myDb
------ jdb statics ------
db_name: USER_DB
mem_collection: 0 bytes
mem_hash: 0 bytes
collection_num: 0
**** collection statics ****
删除数据库
jsonDB是内存数据库,一个数据库本质上就是一个类实例.所以数据库随类实例进行删除和释放.你可以通过del
方法删除这个类实例,
当然也可以让python自己回收.
插入数据
插入一条数据,则对应的collection自动创建.可以插入一条或多条数据,必须通过list
格式组织.单条数据必须是dict
格式.
>>> myDb.insert('COL_CUSTOMERS',[{
'id':1, 'name':'Jeffery', 'sex':'male', 'age':18, 'birth':'1990-01-03'}])
True
>>> print myDb
------ jdb statics ------
db_name: USER_DB
mem_collection: 104 bytes
mem_hash: 0 bytes
collection_num: 1
**** collection statics ****
name: COL_CUSTOMERS
data_num: 0
key: []
index: False
data_mem: 104 bytes
hash_mem: 0 bytes
>>>
可以通过find()
查看插入结果,为了显示格式更加便于阅读,JSONDB提供了静态格式化打印方法rprint()
: