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 ?

3voto

dfrankow Points 2983

Pour Python, la version 1.3.8 inclut une administration expérimentale intégrée pour cela. Ils dites : "activez le buildin suivant dans votre fichier app.yaml :"

builtins:
- datastore_admin: on

" Datastore delete " n'est actuellement disponible qu'avec le runtime Python. Les applications Java, cependant, peuvent toujours profiter de cette fonctionnalité en créant une version d'application Python non par défaut qui active l'administration du Datastore dans le app.yaml. Le support natif pour Java sera inclus dans une prochaine version."

3voto

Girish007 Points 31

Ouvrez "Datastore Admin" pour votre application et activez Admin. Ensuite, toutes vos entités seront listées avec des cases à cocher. Vous pouvez simplement sélectionner les entités non désirées et les supprimer.

3voto

Evan Plaice Points 5677

C'est ce que vous cherchez...

db.delete(Entry.all(keys_only=True))

L'exécution d'une requête limitée aux clés est beaucoup plus rapide qu'une recherche complète, et votre quota sera moins affecté car les requêtes limitées aux clés sont considérées comme de petites opérations.

Voici un lien vers une réponse de Nick Johnson qui le décrit plus en détail.

Vous trouverez ci-dessous une solution REST API de bout en bout pour tronquer une table...

J'ai configuré une API REST pour gérer les transactions de base de données où les routes sont directement mises en correspondance avec le modèle/action approprié. On peut l'appeler en entrant la bonne url (exemple.com/inventory/truncate) et en se connectant.

Voici l'itinéraire :

Route('/inventory/truncate', DataHandler, defaults={'_model':'Inventory', '_action':'truncate'})

Voici le gestionnaire :

class DataHandler(webapp2.RequestHandler):
  @basic_auth
  def delete(self, **defaults):
    model = defaults.get('_model')
    action = defaults.get('_action')
    module = __import__('api.models', fromlist=[model])
    model_instance = getattr(module, model)()
    result = getattr(model_instance, action)()

Il commence par charger le modèle dynamiquement (c'est-à-dire Inventaire trouvé sous api.models), puis appelle la méthode correcte (Inventaire.truncate()) comme spécifié dans le paramètre action.

Le @basic_auth est un décorateur/enveloppeur qui fournit une authentification pour les opérations sensibles (ie POST/DELETE). Il y a aussi un décorateur oAuth disponible si vous êtes préoccupé par la sécurité.

Enfin, l'action est appelée :

def truncate(self):
  db.delete(Inventory.all(keys_only=True))

Cela ressemble à de la magie mais c'est en fait très simple. Le plus beau, c'est que delete() peut être réutilisé pour gérer la suppression des résultats un ou plusieurs en ajoutant une autre action au modèle.

2voto

lrussell Points 2542

Si vous avez beaucoup de données, l'utilisation de l'interface web peut prendre beaucoup de temps. Le site Lanceur App Engine vous permet de tout effacer en une seule fois grâce à la case à cocher 'Clear datastore on launch'. Cet utilitaire est maintenant disponible pour Windows et Mac (framework Python).

2voto

user1552891 Points 40

Pour le serveur de développement, au lieu d'exécuter le serveur via le lanceur de google app engine, vous pouvez l'exécuter depuis le terminal comme suit :

dev_appserver.py --port=[numéro de port] --clear_datastore=yes [nomde l'application].

ex : mon application "reader" tourne sur le port 15080. Après avoir modifié le code et redémarré le serveur, je lance simplement "dev_appserver.py --port=15080 --clear_datastore=yes reader".

C'est bon pour moi.

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