Good accuracy on train dataset with cross validation, but low accuracy on test dataset
I think you are using commented lines in the loop to calculate the cross validation accuracy.

# y_predict = clf.predict(X_train)


It should be

 y_predict = clf.predict(X_test)


And then you should check accuracy score with 'y_test' not 'y_train'.

You are predicting on the data KNN has learnt on. And since KNN algorithms kind of learns the data. You are getting good accuracy.