我需要迭代并删除数据存储区的所有记录。我正在使用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()
。
此时我需要刷新所有数据库记录。我怎么能这样做?
是否有机会删除存储所有数据库记录的本地文件?
答案 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)
这节省了大量的数据库操作。