跳转到主要内容

MeuhDB,一个会说话的数据库

项目描述

这个数据库会说“Meuh”

Build Status Coverage Status

MeuhDb 是一个用Python编写的“虚拟”键/JSON值存储。

安装

要安装最新版本

pip install meuhdb

…但是由于这是一个非常早期的版本,您最好坚持使用这个GitHub源代码仓库。您可能还想阅读变更日志

基本用法

>>> from meuhdb import MeuhDb
>>> db = MeuhDb()  # Create in-memory database
>>> db.set('one', {'name': 'Alice', 'good': True, 'chief': True})
>>> db.set('two', {'name': 'Bob', 'good': True})
>>> db.set('three', {'name': 'Carl', 'good': False})
>>> db.filter(name='Alice')
{'one': {'chief': True, 'good': True, 'name': 'Alice'}}
>>> db.filter(good=True)
{'two': {'good': True, 'name': 'Bob'}, 'one': {'chief': True, 'good': True, 'name': 'Alice'}}
>>> db.filter(good=True, chief=True)  # More than one criteria, it's a "AND"
{'one': {'chief': True, 'good': True, 'name': 'Alice'}
>>> db.delete('one')
>>> db.filter(name='Alice')
{}
>>> db.exists('one')
False
>>> db.insert({'name': 'John'})
'eb3c3a1d-8999-4052-9e3c-2f3542c047b1'
>>> db.update('eb3c3a1d-8999-4052-9e3c-2f3542c047b1', {'age': 42})
>>> db.get('eb3c3a1d-8999-4052-9e3c-2f3542c047b1')
{'age': 42, 'name': 'John'}

目前,您只能查询“等式”,即您正在寻找的内容与JSON字段中的内容之间的严格相等(没有特殊操作符:大于、不同等)。

值必须是JSON可序列化值(字典,不适用于日期、datetime、集合等)。

数据库创建

MeuhDb 类构造函数中有几个可选参数

MeuhDb(
  path=None,
  autocommit=False, autocommit_after=None,
  lazy_indexes=False,
  backend=DEFAULT_BACKEND)
  • path:如果您想将JSON数据库保存到文件中,则是文件路径。如果文件已存在,MeuhDb 将尝试加载数据。如果没有提供,则数据库将在内存中。

  • autocommit:如果设置为 True,则每个“写入”操作都将传输到文件。由于每次都要将整个数据库写入磁盘,因此可能会消耗I/O资源。

  • autocommit_after:一个数值。如果设置,则数据库将在“n”次写入操作后提交。请注意,如果设置了 autocommit 标志,则它具有比计数器更高的优先级。

  • lazy_indexes:当设置为True时,数据库写入数据库时,只存储索引的定义,而不是索引值本身。这意味着数据库在写入时间上更快,但加载速度会变慢,因为我们需要重建所有索引。

  • backend:选择可以使用的JSON后端。有3个可能的后端,从最不高效的到最好的: “json”(来自标准库)、“simplejson”、“jsonlib”、“yajl”或“ujson”。MeuhDb将尝试加载它们中的每一个,并在需要时使它们可用。如果提供了不可用的后端,请不要担心,MeuhDb将回退到标准库中的舒适《json》。

示例

>>> db = MeuhDb('hello.json', autocommit=False, backend='ujson')
>>> db.set('1', {'name': 'Alice'})  # data is not on disk
>>> db.commit()  # saves to disk
>>> db = MeuhDb('hello.json', autocommit=True)
>>> db.all()  # Data is reloaded from the disk
{u'1': {u'name': u'Alice'}}
>>> db.set('2', {'name': 'Bob'})  # data is written on disk

索引

MeuhDb支持索引创建。您可以为加速查询索引一个或多个字段。

示例

>>> db.create_index('name')
>>> db.filter(name='Alice')  # Will use this index
  • 您不必索引JSON值中所有可用的字段,只需索引您可能查询的字段。

  • 索引将与数据库一起在commit()时保存。

  • 如果索引出了问题,只需使用recreate参数重新创建它:db.create_index('name', recreate=True)

索引类型

您可以使用此方法指定索引类型

db.create_index('name', _type='lazy')

您只能创建两种类型的索引: defaultlazy。延迟索引在数据库提交时不会存储,将在启动时重新加载。您可以混合默认和延迟索引。

注意:由于所有JSON键应该是字符串,因此显然无法存储具有非字符串值的索引。一旦索引收到非字符串值(例如整数或布尔值),它将更改为延迟索引。

警告

这不是一个真正的ACID就绪数据库管理器。这可能适合“仅限一个用户”的使用情况。打开和加载大文件非常消耗I/O。因此,MeuhDb 永远不会取代适当的NoSQL数据库系统。

黑客

MeuhDb将与标准的Python 2发行版一起工作。(我有计划使其准备好Python-3)

在虚拟环境中,只需克隆此存储库并在开发模式下安装它

git clone https://github.com/brunobord/meuhdb.git
cd meuhdb
pip install -e ./

您可能需要安装这些包中的一个或多个,以便能够选择这些增强后端之一

  • simplejson,

  • jsonlib(或jsonlib-python3),

  • yajl,

  • ujson

要运行测试,您必须安装toxpip install tox)并简单地运行命令tox

待办事项

有很多东西缺失。Github问题列表将充当“待办事项列表”。如果您有任何错误报告或建议,请提出。


许可

本软件根据MIT许可证发布。有关更多信息,请参阅LICENSE文件。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分发

meuhdb-0.3.0.tar.gz (8.6 KB 查看哈希值

上传于 源代码

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页