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 = 1def 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
