littletable

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:

- simple indexing for improved retrieval performance, and optional enforcing key uniqueness
- access to objects using indexed attributes
- simplified joins using '+' operator syntax between annotated Tables
- the result of any query or join is a new first-class `littletable` Table

`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))
       print(catalog.by.sku["ANVIL-001"].descr)

       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.by.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.9

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.