Est-ce que quelqu'un sait comment supprimer tous les datastore dans Google App Engine ?
Réponses
Trop de publicités?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."
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.
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).
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.