纯用python(python 3 fork)编写的面向文档的数据库。

blitzdb3的Python项目详细描述


闪电战-DB3

构建状态pypi

blitzdb3是blitzdb到python 3的端口。我们在一些内部项目上使用blitzdb,这些项目位于abilian,需要进行这些更改才能将这些项目迁移到python 3。

blitzdb或blitz是一个纯用python编写的基于文档的、面向对象的事务性数据库。此外,它还提供了功能强大的查询语言、文档深度索引、压缩数据存储和嵌入式文档自动引用。它相当快,可以很容易地嵌入到任何python应用程序中,并且没有任何外部依赖项(使用第三方后端时除外)。此外,您还可以将其作为前端用于其他数据库引擎,如MongoDB,以防需要更多电源。

主要功能

  • 基于文档的、面向对象的界面。
  • 强大而丰富的查询语言。
  • 任意字段上的深层文档索引。
  • 文件的压缩存储。
  • 支持多个后端(例如基于文件的存储、MongoDB)。
  • 支持数据库事务(目前仅限于基于文件的后端)。

用例

blitz可以用作客户端应用程序的独立文档存储。最初,blitz设计用于checkmate的python代码分析工具包,其中存储了统计数据。由于blitz将所有文档存储为单个json文件,因此可以对整个数据库进行版本控制。

安装

安装blitz最简单的方法是通过pip轻松安装

pip install blitzdb
#or...
easy_install blitzdb

有关更详细的安装说明,请参阅文档

详细文档

此项目的详细文档位于readthedocs上,请随意查看!

路线图

  • 3.2(未发布):继续修复和升级。
  • 3.1(未发布):放弃对python 2的支持。

更改日志

  • 3.0a1:使用六个端口连接到python 3。清理和格式化代码。

旧变更日志(Andreas Dewes原创的BlitzDB/Andreas@7scientists.com

  • 0.4.4:SQL后端:不要通过强制转换强制服务器默认值,因为这可能导致不兼容。
  • 0.4.3:SQL后端的许多小改进。
  • 0.3.0:全功能SQL后端。
  • 0.2.12:添加了对文档的适当属性迭代的支持
  • 0.2.11:允许通过document.meta属性设置集合参数。
  • 0.2.10:错误修复版本:修复Python3兼容性问题。
  • 0.2.9:错误修复版本:修复文件后端的序列化问题。
  • 0.2.8:添加了get有u键和clear方法来文档
  • 0.2.7:修复了python 3中unicode函数的问题。
  • 0.2.6:错误修复版本:修复了一个问题与$exists运算符一起用于文件后端。
  • 0.2.5:错误修复版本
  • 0.2.4:增加了对MongoDB后端投影和更新操作的支持。
  • 0.2.3:错误修复版本:修复了MongoDB后端事务数据缓存中的错误。
  • 0.2.2:修复MongoDB后端的slice操作符。
  • 0.2.1:更好的测试。
  • 0.2.0:支持在数据库引用中包含附加信息。支持作为字典项访问文档属性。 添加了$regex参数,允许在查询中使用正则表达式。
  • 0.1.5:MongoDB后端现在支持数据库事务。默认情况下,数据库操作现在是读隔离的,即。 未提交的操作在提交之前不会影响数据库查询。
  • 0.1.4:改进了文件后端对象的索引,添加了对自动序列化/反序列化的支持 向索引添加键或查询索引时对象属性的。
  • 0.1.3:现在支持查询集排序(仍处于实验阶段)
  • 0.1.2:小错误修复,blitzdb版本号现在包含在db config dict中
  • 0.1.1:blitzdb现在与python3兼容(感谢david koblas)

贡献者(按字母顺序)

现役维修人员(闪电战3)

  • 斯蒂芬·费米格尔-@sfermiger

原作者(blitzdb)

  • 安德烈亚斯·德维斯-@adewes

原始贡献者

  • @b第8页
  • 弗洛里安·莱曼-@cashaddy
  • 卡尔斯林-@cbrouge
  • 克里斯·穆特尔-@cmutel
  • cecil woebker-@cwoebker
  • 伊桑·布莱克本-@ethan blackburn
  • 哈维尔·科拉多-@jcollado
  • 谢杰森-@jxieeducation
  • 大卫·科布拉斯-@koblas
  • 圣母院-@matrixise
  • 维克多·米克洛维奇-@miclovich
  • Dmytro Kyrychuk-@orgkhnargh
  • christoph neumann-@programmdesign
  • 戴尔-@pureDistoration
  • tjado-@tejado
  • 托马斯·巴林格-@thomas ballinger
  • 泰勒·肯尼迪-@tktech
  • 托比冠军-@tobych

感谢您的所有贡献,没有您,BlitzDB将不再是今天的样子:)

第三方贡献

  • blitzdb的烧瓶适配器。闪电战+烧瓶=太棒了!

示例

为了了解闪电战的作用,这里有一些例子。

创建对象

fromblitzdbimportDocumentclassMovie(Document):passclassActor(Document):passthe_godfather=Movie({'name':'The Godfather','year':1972,'pk':1})marlon_brando=Actor({'name':'Marlon Brando','pk':1})al_pacino=Actor({'name':'Al Pacino','pk':1})

在数据库中存储对象:

fromblitzdbimportFileBackendbackend=FileBackend("/path/to/my/db")the_godfather.save(backend)marlon_brando.save(backend)al_pacino.save(backend)

从数据库检索对象:

the_godfather=backend.get(Movie,{'pk':1})#or...the_godfather=backend.get(Movie,{'name':'The Godfather'})

过滤对象

movies_from_1972=backend.filter(Movie,{'year':1972})

处理事务

backend.begin()the_godfather.director='Roland Emmerich'#oops...the_godfather.save()backend.rollback()#undo the changes...

创建嵌套对象引用

the_godfather.cast={'Don Vito Corleone':marlon_brando,'Michael Corleone':al_pacino}#Documents stored within other objects will be automatically converted to database references.marlon_brando.performances=[the_godfather]al_pacino.performances=[the_godfather]marlon_brando.save(backend)al_pacino.save(backend)the_godfather.save(backend)#Will store references to the movies within the documents in the DB

创建数据库索引和高级查询

backend.create_index(Actor,'performances')#Will create an index on the 'performances' field, for fast queryinggodfather_cast=backend.filter(Actor,{'movies':the_godfather})#Will return 'Al Pacino' and 'Marlon Brando'

任意过滤器表达式

star_wars_iv=Movie({'name':'Star Wars - Episode IV: A New Hope','year':1977})star_wars_iv.save()movies_from_the_seventies=backend.filter(Movie,{'year':lambdayear:year>=1970andyear<1980})#Will return Star Wars & The Godfather (man, what a decade!)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
spring JSTL:绝对uri:http://java.sun.com/jsp/jstl/core无法在两个站点中解析。xml或与此应用程序一起部署的jar文件   java在Junit测试中找不到失败的符号   java为什么在没有同步块的情况下调用wait()、notify()或notifyAll()不是编译器错误?   使用onDraw()绘制多个位图的java Android在曲面视图上放大缩小画布   在java中比较args值和字符串   java更改文件中的特定字节   java TransformerFactory破坏<html>标记中的<input>和<br>标记   azure appinsights java自定义指标不起作用   Java泛型在实现接口的类上指定上界,接口本身指定上界   java AS400 prog和动态类路径   java应用程序截图时收到空消息   java无法从片段中获取上下文   找不到java配置单元UDF类   linux是一个提供java的接口。lang.NoClassDefFoundError   java如何使用面向对象建模创建此数据库