If you want Simple you can use the following piece of code.
It won't work if you have a million records, but it's a nice intelligent flatfile storage with a select where + order by and limit emulator.
# #########################################################
class ListMgr( object ): def __init__( self, klass, filename ): self.filename = filename self.klass = klass self.load()
def load( self ):
try:
self.contents = pickle.load( open( self.filename ))
print "Loaded %d items %s in %s" % (len(self.contents), self.klass, type(self))
except IOError:
print "Creating new contents for", type(self)
self.contents = {}
self.save()
if self.contents: self.insert_id = max( self.contents.keys() ) +1 else: self.insert_id = 1
def save( self ):
pickle.dump( self.contents, open( self.filename+'.tmp', 'w' ) )
os.rename( self.filename+'.tmp', self.filename )
print "Saved %d items %s in %s" % (len(self.contents), self.klass, type(self))
def new( self, **params ): return self.klass( **params )
def insert( self, obj ): assert not hasattr( obj, 'id' ) or obj.id is None obj.id = self.insert_id self.insert_id += 1 self.contents[obj.id] = obj
def update( self, obj ): assert obj.id is not None self.contents[obj.id] = obj
def select( self, id ): return self.contents[ id ]
def delete( self, id ): del self.contents[ id ]
def count( self ): return len( self.contents )
# where is a lambda function, order_by is a cmp function, limit is a slice def select_multiple( self, where=None, order_by=None ): if where: c = filter( where, self.contents.itervalues() ) else: c = self.contents.values() if order_by: c.sort( order_by ) return c
# #########################################################
class ListEntry( object ): def __init__( self, **params ): self.__dict__ = dict.fromkeys( self.get_fields() ) self.__dict__.update( params )
def get_fields( self ): return ()
def display( self ): print '-'*40 if hasattr( self, 'id' ): print "id :",self.id for k in self.get_fields(): print k," :",getattr(self,k) print
# #########################################################
class AddressBookEntry( ListEntry ): def get_fields( self ): return 'name', 'address', 'zipcode', 'city', 'country', 'phone' get_fields = classmethod( get_fields )
class AddressBook( ListMgr ): def __init__( self, fname ): super( AddressBook, self ).__init__( AddressBookEntry, fname )
-- http://mail.python.org/mailman/listinfo/python-list