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?

28
demandé sur Dan McGrath 2009-07-20 21:24:11

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

16
répondu Peter Recore 2017-05-23 12:00:05

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.

++

29
répondu Kohistan 2010-08-18 21:39:20

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 /

utilisant le Datastore

15
répondu Tamas Kalman 2010-08-27 04:50:19

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());      
    }   
}
9
répondu Hussein El Motayam 2011-08-13 02:29:25

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.

4
répondu DanDan 2009-09-07 22:25:44

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);
2
répondu FredArters 2010-04-20 18:26:08

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

2
répondu jonmiddleton 2010-11-30 22:52:25

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.

1
répondu Dennis De Reyer 2015-06-02 14:11:28

Supprimer des données locales peut être fait en ouvrant http://localhost:8000/datastore

1
répondu Yash Sharma 2016-07-05 17:48:11

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...

0
répondu opensas 2011-01-12 06:20:17

lorsque vous travaillez localement, sur Windows 7, le fichier est user\UserName\AppData\Local\Temp\dev_appserver.la banque de données

0
répondu user1055761 2012-01-14 13:05:02

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
0
répondu cwd 2013-01-16 21:16:04

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)
0
répondu Solido 2014-10-01 11:19:25

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.
0
répondu Eric McNeill 2018-02-15 00:31:39

ç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.

-1
répondu user3419638 2014-03-31 08:00:48