把你的资料放进袋子里再拿出来
databag的Python项目详细描述
将数据放入袋中
非常简单的库,只需将数据分散到磁盘并将其取出 小题大做。
等等……
这有点像在sql db之上的nosqldb,对吧?
是的。
功能
- 使用方便,在访问相对大量的项目时相当高效 (这里不是说大数据,但是几千个项目都很好)
- 不需要其他lib,所有东西都包括python电池
- 建立在sqlite3之上,因此它快速稳定(包含在python中 stdlib)
- 简单易用-只需创建一个并像字典一样使用它。大多数dict方法 支持。也可以通过不指定键来像集合一样添加到它。一个人会 在飞行中被创造。
- 大多测试良好
- 非常适合在小型vm实例上运行。不需要任何其他守护进程 提供数据访问
- 核心代码大约400行-非常容易理解。
- 在受益于bz2的情况下自动压缩数据
- 您始终可以使用其他语言的本机sqlite3 libs查询数据 如果你需要的话。只是数据库中的字符串。
- 由于底层数据文件是sqlite3,因此多个进程可以使用 同一文件(多个读、写锁等)
- 每个对象都有一个附加到它的ts对象,以便保存时使用。 可通过bag.when('key')访问
版本控制
简单的版本控制是可能的。只需创建如下的数据包:
>>> dbag = DataBag(versioned=True)
然后你就可以做像这样的事情
>>> dbag['blah'] = 'blip' >>> dbag['blah'] = 'new blip' >>> dbag['blah'] = 'newer blip' >>> dbag.get('blah', version=-2) u'blip' >>> dbag.get('blah', version=-1) u'new blip' >>> dbag.get('blah') u'newer blip' >>> dbag['blah'] u'newer blip'
默认设置是保留10个版本,但可以使用历史记录设置 初始化包时的参数。
bag.get(…)方法的工作原理与字典中的.get(…)非常相似,但是它使用 version的附加关键字参数,指示要往回走多远
示例
>>> from databag import DataBag >>> bag = DataBag() # will store sqlite db in memory >>> bag['xyz'] = 'some string' # will save in the db >>> s = bag['xyz'] # retrieves from db >>> s 'some string' >>> 'xyz' in bag # True True >>> bag['abc'] = {'x':22, 'y':{'a':'blah'}} # works >>> bag['abc'] {u'y': {u'a': u'blah'}, u'x': 22} >>> [k for k in bag] ['abc', 'xyz'] >>> bag.when('xyz') datetime.datetime(2011, 12, 31, 2, 45, 47, 187621) >>> del bag['xyz'] >>> 'xyz' in bag False >>> meh = DataBag(bag='other') # set name of storage table
dictbag示例
>>> from databag import DictBag, Q >>> d = DictBag() >>> d.ensure_index(('name', 'age')) >>> person1 = {'name':'joe', 'age':23} >>> person2 = {'name':'sue', 'age':44} >>> d.add(person1) 'fachVqv6RxsmCXAZgJMJ5p' >>> d.add(person2) 'fpC7cAtx2ZQLadprQR7aa6' >>> d.find(Q('age')>40).next() (u'fpC7cAtx2ZQLadprQR7aa6', {u'age': 44, u'name': u'sue'}) >>> age = Q('age') >>> [p for p in d.find(20 < age < 50) ] [(u'fachVqv6RxsmCXAZgJMJ5p', {u'age': 23, u'name': u'joe'}), (u'fpC7cAtx2ZQLadprQR7aa6', {u'age': 44, u'name': u'sue'})] >>>
限制
- 尽管python中的许多基本数据类型都支持这些值 (列表、词典、元组、int、字符串)…可以保存datetime对象 很好,但它们是以ISO格式的原始字符串形式出现的 日期时间。
- 保存词典时,关键字必须是词典中的字符串。如果 他们不是,当他们从包里回来时会是
- 如果使用版本控制,请确保使用 已启用版本控制,每次的大小都相同不这样做 将导致有趣的事情发生,特别是,您的数据库将采取行动 未版本化并覆盖最近的更新,不级联历史更改 记录在案。
进一步说明
DictShield library对模型的创建是一个极好的称赞 那张地图很好地保存在录音袋里。分摊类包括在 从dictshield.document.document继承并添加一些帮助程序的数据包 用于从dictbags中存储/检索dictshield模型。