code: def insert(self,*args,**kw):
          
          if args:
              kw = dict([(f,arg) for f,arg in zip(self.fields,args)])
          # initialize all fields to None
          record = dict([(f,None) for f in self.fields])
          # raise exception if unknown field
          for key in kw:
              if not key in self.fields:
                  raise NameError,"Invalid field name : %s" %key
          # set keys and values
          for (k,v) in kw.iteritems():
              record[k]=v
          # add the key __id__ : record identifier
          record['__id__'] = self.next_id
          # add the key __version__ : version number
          record['__version__'] = 0
          # create an entry in the dictionary self.records, indexed by __id__
          self.records[self.next_id] = record
          # update index
          for ix in self.indices.keys():
              bisect.insort(self.indices[ix].setdefault(record[ix],[]),
                  self.next_id)
          # increment the next __id__
          self.next_id += 1
          return record['__id__']
docs: Insert a record in the database
          Parameters can be positional or keyword arguments. If positional
          they must be in the same order as in the create() method
          If some of the fields are missing the value is set to None
          Returns the record identifier