把你的资料放进袋子里再拿出来

databag的Python项目详细描述


d bag

将数据放入袋中

非常简单的库,只需将数据分散到磁盘并将其取出 小题大做。

等等……

这有点像在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模型。

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

推荐PyPI第三方库


热门话题
Maven中的java,为什么要运行“mvn clean”?   java会降低图像质量。OutOfMemory异常Android   在Java8中将函数传递到流的过滤方法   jboss6。x java。lang.NoClassDefFoundError,当我将<listenerclass>包含到web时。xml java   java读取图像像素时,像素Alpha始终为255   java在迭代后跳过一行   java如何创建我自己的单链表   意图上的java空指针异常。getStringExtra.:安卓   具有连接实体的java Hibernate onetoone映射   java需要帮助在自制的仓鼠模拟器上实现启动/恢复/暂停/停止线程操作   如何测试非主方法?[Java,IntelliJ]   java jdbc自动提交(false)不起作用   java在JADE中的同一容器中创建多个代理   java OkHttp获取失败的响应正文   java Webdriver flash按钮