124 votes

Comment supprimer tous les datastores dans Google App Engine ?

Est-ce que quelqu'un sait comment supprimer tous les datastore dans Google App Engine ?

69voto

JohnIdol Points 16355

Si vous parlez de la magasin de données en direct Ouvrez le tableau de bord de votre application (login sur appengine) puis datastore --> dataviewer, sélectionnez toutes les lignes de la table que vous voulez supprimer et cliquez sur le bouton supprimer (vous devrez faire cela pour toutes vos tables). Vous pouvez faire la même chose de manière programmatique via l'API remote_api (mais je ne l'ai jamais utilisé.)

Si vous parlez de la magasin de données de développement il vous suffit de supprimer le fichier suivant : "./WEB-INF/appengine-generated/local_db.bin" . Le fichier sera généré pour vous la prochaine fois que vous exécuterez le serveur de développement et vous aurez une base de données claire.

Veillez à nettoyer votre projet par la suite.

C'est l'un des petits pièges qui se présentent lorsque vous commencez à jouer avec le moteur d'application Google. Vous vous retrouverez à persister des objets dans le datastore, puis à changer le modèle d'objet JDO pour vos entités persistantes, et vous vous retrouverez avec des données obsolètes qui feront planter votre application.

57voto

Juvenn Woo Points 644

La meilleure approche est la méthode de l'API à distance, comme le suggère Nick, qui est un spécialiste de l'API. Moteur d'application ingénieur de Google alors faites-lui confiance.

Ce n'est pas si difficile à faire, et le dernier SDK 1.2.5 fournit le fichier remote_shell_api.py. Allez donc télécharger le nouveau SDK. Puis suivez les étapes :

  • connecter le serveur distant dans votre ligne de commande : remote_shell_api.py yourapp /remote_api Le shell vous demandera vos informations de connexion, et si vous l'autorisez, il créera un shell Python pour vous. Vous devez configurer le gestionnaire d'url pour /remote_api dans votre app.yaml.

  • récupérer les entités que vous souhaitez supprimer, le code ressemble à quelque chose comme ça :

    from models import Entry
    query = Entry.all(keys_only=True)
    entries =query.fetch(1000)
    db.delete(entries)
    \# This could bulk delete 1000 entities a time

Mise à jour 2013-10-28 :

  • remote_shell_api.py a été remplacé par remote_api_shell.py et vous devriez vous connecter avec remote_api_shell.py -s your_app_id.appspot.com selon la documentation .

  • Il existe une nouvelle fonctionnalité expérimentale Admin Datastore Après l'avoir activé dans les paramètres de l'application, vous pouvez supprimer en bloc et sauvegarder votre base de données via l'interface web.

27voto

systempuntoout Points 27584

Le moyen le plus rapide et le plus efficace de gérer les suppressions en masse sur un stock de données est d'utiliser la nouvelle fonction de suppression des données. API de mappeur annoncé sur le dernier Google I/O .

Si votre langue de prédilection est Python vous n'avez qu'à enregistrer votre mappeur dans un fichier de type mapreduce.yaml et définissez une fonction comme ceci :

from mapreduce import operation as op
def process(entity):
 yield op.db.Delete(entity)

Sur Java vous devriez jeter un coup d'œil à cet article qui suggère une fonction comme celle-ci :

@Override
public void map(Key key, Entity value, Context context) {
    log.info("Adding key to deletion pool: " + key);
    DatastoreMutationPool mutationPool = this.getAppEngineContext(context)
            .getMutationPool();
    mutationPool.delete(value.getKey());
}

EDIT :
Depuis le SDK 1.3.8, il y a une Fonction d'administration du Datastore à cette fin

27voto

Steven Almeroth Points 2546

Vous pouvez également effacer le datastore du serveur de développement lorsque vous exécutez le serveur :

/path/to/google_appengine/dev_appserver.py --clear_datastore myappname/

http://code.google.com/appengine/docs/python/gettingstarted/usingdatastore.html

15voto

Nick Johnson Points 79909

Si vous avez une quantité importante de données, vous devez utiliser un script pour les supprimer. Vous pouvez cependant utiliser remote_api pour effacer le datastore du côté client de manière directe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X