如何使用GQL删除记录?
我需要遍历并删除我数据存储中的所有记录。我正在使用 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 个回答
我想分享一个对已经被接受的答案很有帮助的小技巧。
你可以用 db.delete 来做以下操作:
persons = Person.all()
d = []
for p in persons:
d.append(p)
db.delete(d)
这样可以节省很多数据库操作。
如果你有一个变量用来存储数据库中的记录,那么你可以直接使用delete()来删除它。
比如说,你有一个叫做Persons的实体,你可以这样做:
personToDelete = db.GqlQuery("SELECT * FROM Persons WHERE name='Joe'");
person = personToDelete[0];
person.delete();
另外,你还需要导入数据库的库,不过我想你已经这样做了,因为你显然是在使用数据库。
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