如何使用GQL删除记录?

8 投票
3 回答
10713 浏览
提问于 2025-04-17 09:34

我需要遍历并删除我数据存储中的所有记录。我正在使用 Google App Engine Launcher 在本地测试。该怎么做呢?

当我尝试用以下方式删除 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

我想分享一个对已经被接受的答案很有帮助的小技巧。

你可以用 db.delete 来做以下操作:

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

db.delete(d)

这样可以节省很多数据库操作。

1

如果你有一个变量用来存储数据库中的记录,那么你可以直接使用delete()来删除它。

比如说,你有一个叫做Persons的实体,你可以这样做:

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

另外,你还需要导入数据库的库,不过我想你已经这样做了,因为你显然是在使用数据库。

9

GQL语言只能用来获取实体或者键(详细信息可以查看这个链接)。

你需要这样做:

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,或者通过 https://appengine.google.com/ 访问 - 然后把所有东西都删掉。

你可能会觉得这个链接有用: http://code.google.com/appengine/articles/update_schema.html

撰写回答