8
votes

Comment supprimer un enregistrement en utilisant gql?

J'ai besoin d'itération et de supprimer tous les enregistrements de mon magasin de données. J'utilise Google App Engine Launcher pour la tester sur l'hôte local. Comment le faire?

Quand j'essaie de supprimer tous les records du modèle de la personne de cette façon: xxx

Je reçois une erreur BadvalueError: Propriété Y doit être une instance Str ou Unicode, pas un long Je suppose qu'il y a un conflit dans les types de données de modèle. xxx

le champ y = db.stringproperty () était précédemment y = dB. IntegerProperty () . En ce moment, j'ai besoin de chasser tous les enregistrements de DB. Comment puis-je faire cela?

est une occasion de supprimer le fichier local qui stocke tous les enregistrements de DB?


3 commentaires

Lorsque vous faites qobj = personne.All (), vous définissez qobj vers une liste d'objets de personne. Pour autant que je sache, vous ne pouvez pas appeler Supprimer sur cette liste - vous devez itérer dans la liste et supprimer chaque objet séparément.


code.google.com/appengine/docs/python/datastore/ ... ... Supprimer (modèles) Supprime une ou plusieurs instances de modèle du magasin de données. Arguments: Modèles une instance de modèle, une clé pour une entité ou une liste (ou une autre iTable) d'instances modèles ou de clés d'entités à supprimer.


Je viens d'essayer db.delete (personne.Tall ()) , à l'aide de votre modèle Personne , et cela fonctionne parfaitement (efface tout personne objets de db)


3 Réponses :


1
votes

Si vous avez une variable qui stocke un enregistrement sur la base de données, vous pouvez simplement utiliser Supprimer ().

C'est-à-dire que vous avez une entité appelée personnes, vous pouvez faire: P>

personToDelete = db.GqlQuery("SELECT * FROM Persons WHERE name='Joe'");
person = personToDelete[0];
person.delete();


1 commentaires

Cela nous donne une erreur: «Query» L'objet ne prend pas en charge l'indexation. Qu'as-on manquant?



9
votes

La langue GQL ne peut être utilisée que pour récupérer des entités ou une clé (cf. http: // code.google.com/appengine/docs/python/datastore/gqlreference.html )

Vous devrez le faire: xxx

concernant le Erreur BadvalueError: Propriété Y doit être une instance STR ou Unicode, pas une longue , vous devrez modifier toutes les données (de l'entier à la chaîne) dans la base de données pour résoudre le conflit.

Il semble que vous souhaitiez tout supprimer, une autre solution serait d'aller à la page d'administration de DataSore - http: // localhost : 8080 / _ah / admin sur localhost ou via https://appengine.google.com/ - et supprimer tout.

Vous pourriez trouver cela utile: http://code.google.com/appengine/articles /update_schema.html


1 commentaires

Ceci est pas correct . Vous n'avez pas besoin du explicite pour . C'était soit corrigé ou quelque chose d'autre était faux



0
votes

Juste pour partager des conseils utiles sur la réponse déjà acceptée.

Vous pouvez effectuer ce qui suit avec db.delete: xxx

ceci enregistre beaucoup d'opérations de DB .


2 commentaires

Je pense que cela est très inefficace. Vous créez un autre tableau entier, mais vous n'avez pas besoin de.


Cela a donné une erreur "AttributeError:" Liste 'Object n'a pas d'attribut' Supprimer '"" suggestions?