如何使用GQL删除记录?

时间:2012-01-05 03:01:25

标签: python gql

我需要迭代并删除数据存储区的所有记录。我正在使用Google App引擎启动器在本地主机上测试它。怎么做?

当我尝试以这种方式删除Person模型中的所有回忆:

 qObj = Person.all()
 db.delete(qObj)

我收到错误BadValueError: Property y must be a str or unicode instance, not a long 我猜模型数据类型存在冲突。

class Person(db.Model):
    name = db.StringProperty()
    x = db.StringProperty()
    y = db.StringProperty()
    group = db.StringProperty()

字段y = db.StringProperty()之前是y = db.IntegerProperty()。 此时我需要刷新所有数据库记录。我怎么能这样做?

是否有机会删除存储所有数据库记录的本地文件?

3 个答案:

答案 0 :(得分:9)

GQL语言只能用于检索实体或密钥(参见http://code.google.com/appengine/docs/python/datastore/gqlreference.html

你必须这样做:

persons = Person.all()

for p in persons:
    p.delete()

关于错误BadValueError: Property y must be a str or unicode instance, not a long,您必须修改数据库中的所有数据(从整数到字符串)以解决冲突。

您似乎想要删除所有内容,因此另一种解决方案是只需访问数据存储区管理页面 - http://localhost:8080/_ah/admin on localhost或https://appengine.google.com/ - 并删除所有内容。

您可能会觉得这很有用:http://code.google.com/appengine/articles/update_schema.html

答案 1 :(得分:1)

如果您有一个在数据库中存储记录的变量,那么您只需使用delete()。

也就是说,假设您有一个名为Persons的实体,您可以这样做:

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

您还必须导入数据库库,但我假设您已经这样做了,因为您明确使用了数据库。

答案 2 :(得分:0)

只是就已经接受的答案分享有用的提示。

您可以使用db.delete执行以下操作:

persons = Person.all()
d = []
for p in persons:
    d.append(p)

db.delete(d)

这节省了大量的数据库操作。