code: def updatewhere(clas,pool_or_cursor,where_keys,**update_keys):
      "this doesn't allow raw_keys for now"
      # if clas.JSONFIELDS: raise NotImplementedError # todo(awinter): do I need to make the same change for SpecialField?
      if not where_keys or not update_keys: raise ValueError
      setclause=','.join(k+'=%s' for k in update_keys)
      whereclause=' and '.join(eqexpr(k,v) for k,v in where_keys.items())
      q='update %s set %s where %s'%(clas.TABLE,setclause,whereclause)
      vals = tuple(update_keys.values()+where_keys.values())
      commit_or_execute(pool_or_cursor,q,valsf updatewhere(clas,pool_or_cursor,where_keys,**update_keys):
      "this doesn't allow raw_keys for now"
      # if clas.JSONFIELDS: raise NotImplementedError # todo(awinter): do I need to make the same change for SpecialField?
      if not where_keys or not update_keys: raise ValueError
      setclause=','.join(k+'=%s' for k in update_keys)
      whereclause=' and '.join(eqexpr(k,v) for k,v in where_keys.items())
      q='update %s set %s where %s'%(clas.TABLE,setclause,whereclause)
      vals = tuple(update_keys.values()+where_keys.values())
      commit_or_execute(pool_or_cursor,q,vals)
docs: this doesn't allow raw_keys for now