App Engine: comment "réinitialiser" le datastore?
Eh bien, je me développe dans App Engine (Java) et après beaucoup d'essais et de déploiements, j'ai besoin de réinitialiser le datastore. Il y a beaucoup de données aléatoires que j'ai ajoutées pour tester les performances, et en plus les entités ont beaucoup changé, donc je dois supprimer tout: données, tables, Index.
Comment faire?
15 réponses
il n'y a pas de commande intégrée équivalente à DROP TABLE ou TRUNCATE TABLE EN SQL. Vous avez juste besoin de créer une page "supprimer tout" dans votre application, puis à plusieurs reprises appeler cette page via un script. Dans cette page, vous souhaitez supprimer autant d'entités que vous pouvez encore raisonnablement s'attendre à terminer avant la demande. Le code exact dépend si vous utilisez JDO/JPA ou l'API de bas niveau. (L'API de bas niveau sera plus rapide car vous pouvez utiliser des opérations par lots.)
Ce précédent DONC, la question est à peu près la même, seulement pour Python
désolé de réveiller ce thread vers le haut, mais juste au cas où je voudrais ajouter un tip pour noobs comme moi (finalement trouvé la réponse dans la documentation google):
si vous voulez réinitialiser le Local datastore (par exemple pendant le développement en utilisant eclipse) d'un seul coup, fermez le serveur, trouvez le fichier local_db.bin ' dans votre projet (devrait être dans le WEB-INF/appengine-generated/ directory), et de le supprimer.
fonctionne très bien avec java, n'a pas encore essayé avec python.
++
effacer le Serveur de Développement de la banque de données
le serveur web de développement utilise une version locale du datastore pour tester votre application, en utilisant des fichiers temporaires. Les données persistent tant que les fichiers temporaires existent, et le serveur web ne réinitialise pas ces fichiers à moins que vous ne lui demandiez de le faire.
si vous voulez que le serveur de développement efface son datastore avant de démarrer, utilisez l'option --clear_datastore lors du démarrage du serveur:
dev_appserver.py -- clear_datastore helloworld /
exécuter une requête sans filtre pour récupérer toutes les entités, et les supprimer un par un.
import javax.servlet.http.*;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
Query mydeleteq = new Query();
PreparedQuery pq = datastore.prepare(mydeleteq);
for (Entity result : pq.asIterable()) {
datastore.delete(result.getKey());
}
}
désolé d'être si en retard, mais j'essayais juste de faire la même chose moi-même...
je me suis connecté à mon compte (appengine.google.com) et trouvé l'option de parcourir le datastore à travers un utilitaire Administrateur (datastore/dataviewer)... qui permet de créer/mettre à jour/supprimer.
selon GAE docs vous pouvez supprimer plusieurs objets dans JDO, appeler le Persistencemanager's deletePersistentAll(... méthode avec une Collection d'objets.
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery("select from " + Your.class);
List<Your> objs = (List<Your>) query.execute();
pm.deletePersistentAll(objs);
supprimer toutes (ou une partie) les données de votre application fait maintenant partie de la console D'administration
pour activer cette fonctionnalité, il suffit d'activer l'intégration suivante dans votre application.fichier yaml:
builtins:
- datastore_admin: on
ajouter ces lignes à l'annexe.yaml active la page "Datastore Admin" dans la Console D'administration de votre application
si vous utilisez maven dans votre projet, vous pouvez simplement faire une"mvn clean install". Cela va réinitialiser le datastore localement bien sûr.
Supprimer des données locales peut être fait en ouvrant http://localhost:8000/datastore
dans mon cas (travailler avec le plugin eclipse et le cadre de jeu) j'ai dû arrêter l'application, supprimer le fichier / apps / crud-gae/tmp / datastore et puis redémarrer l'application
ça a marché pour moi... travailler localement, bien sûr...
lorsque vous travaillez localement, sur Windows 7, le fichier est user\UserName\AppData\Local\Temp\dev_appserver.la banque de données
j'utilisais app engine avec Google Coursebuilder et j'ai dû utiliser cette commande pour effacer le datastore:
python dev_appserver.py --clear_datastore /path/to/app
Hors contexte pour java dev mais puisqu'il y a peu de documentation voici comment le faire en aller :
keys, _ := datastore.NewQuery("").KeysOnly().GetAll(c, nil)
datastore.DeleteMulti(c, keys)
pour ajouter une autre information utile: si vous utilisez Eclipse et que vous voulez effacer le datastore local, cherchez cette console msg:
INFO: Local Datastore initialized:
Storage: C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin
il apparaît seulement après que vous ayez fait quelque chose pour forcer l'initialisation du datastore, par exemple qui pourrait être en train de rafraîchir la liste des entités sur la page d'administration. Puis arrêtez votre serveur et supprimez le fichier, et lorsque vous redémarrez vous devriez voir:
INFO: The backing store, C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin, does not exist. It will be created.
ça ne marche pas pour moi.
j'ai une application GAE où je dois me connecter au début.
j'ai supprimé mon local_db.bin file (j'ai plus de fichiers dans ce dossier: datastore-indexes-auto.xml et local_search.bn). J'ai rouvert mon projet et l'ai lancé. Quand je lancerai ma principale .jsp, c'est la demande de chargement de mon datastore mais je n'ai pas de données dans mon datastore et me demandant mon PMF (persistent manager factory).
dois-je supprimer plus de choses?
exactement, j'essaie d'ouvrir: localhost: 8888 / _ah/ admin / mais il n'est pas trouvé.
Diego.