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

Reply via email to