Module littletable
[frames] | no frames]

Module littletable

source code

littletable - a Python module to give ORM-like access to a collection of objects

The littletable module provides a low-overhead, schema-less, in-memory database access to a collection of user objects. littletable provides a DataObject class for ad hoc creation of semi-immutable objects that can be stored in a littletable Table.

In addition to basic ORM-style insert/remove/query/delete access to the contents of a Table, littletable offers:

littletable Tables do not require an upfront schema definition, but simply work off of the attributes in the stored values, and those referenced in any query parameters.

Here is a simple littletable data storage/retrieval example:

   from littletable import Table, DataObject

   customers = Table('customers')
   customers.create_index("id", unique=True)
   customers.insert(DataObject(id="0010", name="George Jetson"))
   customers.insert(DataObject(id="0020", name="Wile E. Coyote"))
   customers.insert(DataObject(id="0030", name="Jonny Quest"))

   catalog = Table('catalog')
   catalog.create_index("sku", unique=True)
   catalog.insert(DataObject(sku="ANVIL-001", descr="1000lb anvil", unitofmeas="EA",unitprice=100))
   catalog.insert(DataObject(sku="BRDSD-001", descr="Bird seed", unitofmeas="LB",unitprice=3))
   catalog.insert(DataObject(sku="MAGNT-001", descr="Magnet", unitofmeas="EA",unitprice=8))
   catalog.insert(DataObject(sku="MAGLS-001", descr="Magnifying glass", unitofmeas="EA",unitprice=12))

   wishitems = Table('wishitems')
   wishitems.create_index("custid")
   wishitems.create_index("sku")
   wishitems.insert(DataObject(custid="0020", sku="ANVIL-001"))
   wishitems.insert(DataObject(custid="0020", sku="BRDSD-001"))
   wishitems.insert(DataObject(custid="0020", sku="MAGNT-001"))
   wishitems.insert(DataObject(custid="0030", sku="MAGNT-001"))
   wishitems.insert(DataObject(custid="0030", sku="MAGLS-001"))

   # print a particular customer name 
   # (unique indexes will return a single item; non-unique
   # indexes will return a list of all matching items)
   print customers.id["0030"].name

   # print all items sold by the pound
   for item in catalog.query(unitofmeas="LB"):
       print item.sku, item.descr

   # print all items that cost more than 10
   for item in catalog.where(lambda o : o.unitprice>10):
       print item.sku, item.descr, item.unitprice

   # join tables to create queryable wishlists collection
   wishlists = customers.join_on("id") + wishitems.join_on("custid") + catalog.join_on("sku")

   # print all wishlist items with price > 10
   bigticketitems = wishlists().where(lambda ob : ob.unitprice > 10)
   for item in bigticketitems:
       print item

   # list all wishlist items in descending order by price
   for item in wishlists().sort("unitprice desc"):
       print item

Version: 0.8

Author: Paul McGuire <ptmcg@users.sourceforge.net>

Classes
  DataObject
A generic semi-mutable object for storing data values in a table.
  Table
Table is the main class in littletable, for representing a collection of DataObjects or user-defined objects with publicly accessible attributes or properties.
  PivotTable
Enhanced Table containing pivot results from calling table.pivot().
  JoinTerm
Temporary object created while composing a join across tables using Table.join_on and '+' addition.