Git Product home page Git Product logo

databag's Introduction

PUT YOUR DATA IN A BAG

Pretty simple library for just splatting stuff to disk and getting it back out with minimal fuss.

wait...

This is sort of like a nosql db on top of an sql db, right?

Yep.

features

  • Easy to use and quite efficient at accessing relatively large number of items (not talking big data here, but a couple of thousand items works well)
  • Requires no other libs, everything is python batteries included.
  • Built on top of sqlite3 so it's fast and stable (which is included in Python stdlib)
  • Easy to use - just create one and use it like a dictionary. Most dict methods supported. Also can add to it like a set by not specifying a key. One will be created on the fly.
  • Mostly well tested
  • Ideal for running on small vm instances. Doesn't require any other daemon to provide data access
  • Core code is about 100 200 lines - very easy to understand.
  • Automatically compresses data with bz2 in cases that benefit from it
  • You can always query the data with native sqlite3 libs from other languages if you need to. It's just strings in the database.
  • Since the underlying datafile is sqlite3, multiple processes can work with the same file (multiple read, write locks, etc)
  • Every object gets a ts object attached to it for convenience when it's saved. This is accessed via bag.when('key')

versioning

Simple versioning is possible. Just create your DataBag like:

>>> dbag = DataBag(versioned=True)

and then you can do things like...

>>> 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'

The default is to keep 10 versions but that can be set with the history parameter when initializing your bag.

A bag.get(...) method works much like a dictionary's .get(...) but with an additional keyword argument of version that indicates how far back to go.

examples

>>> 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

limitations

  • although a lot of the basic data types in python are supported for the values (lists, dictionaries, tuples, ints, strings)... datetime objects can be saved fine but they come out of the bag as an iso format string of the original datetime.
  • when saving a dictionary, the keys must be a string in the dictionary. If they are not, they will be when coming back from the bag
  • if using versioning, be sure to instantiate your DataBag object with versioning enabled and the same history size each time. Failure to do so will cause interesting things to happen, in particular, your databag will act unversioned and overwrite recent updates w/o cascading the historical change to records.

databag's People

Contributors

nod avatar

Stargazers

Dave avatar

Watchers

Dave avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.