2012-01-05 47 views
8

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

当我试图删除人物模型中的所有recors这样:

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

当你qObj = Person.all(),你设置qObj到Person对象的列表。据我所知,你不能在该列表上调用delete,你必须遍历列表并单独删除每个对象。 – pinerd314159 2012-01-05 03:25:10

+0

http://code.google.com/appengine/docs/python/datastore/functions.html#create_config ...删除(型号) 删除从数据存储的一个或多个模型实例。 参数:型号 一个 模型实例,一个实体按键,或模型实例或实体删除键的列表(或其他可迭代)。 – 2012-01-05 03:39:01

+0

我刚试过['db.delete(Person.all())'](https://developers.google。com/appengine/docs/python/datastore/functions#delete),使用你的确切'Person'模型,并且它可以很好地工作(从db清除所有'Person'对象) – bobobobo 2013-04-10 00:58:17

回答

8

的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在本地主机上或通过https://appengine.google.com/ - 并删除一切。

您可能会发现这个有用:http://code.google.com/appengine/articles/update_schema.html

+0

这是__not correct__。你不需要明确的“for”。这是固定的或其他错误 – bobobobo 2013-04-10 01:03:27

1

如果您有存储在数据库中记录一个变量,那么你可以简单地用delete()。

也就是说,假设你有一个实体,称为人,你可以这样做:

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

你还必须导入数据库库,但我假设你做,反正给你是清楚地使用数据库。

+0

这给了我们一个错误:'Query'对象不支持索引。我们缺少什么? – Praxiteles 2017-07-02 09:05:31

0

只是对已接受的答案分享有用的技巧。

你可以做db.delete如下:

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

db.delete(d) 

这节省了很多分贝的操作。

+0

我认为这是非常低效的。你正在创建一个完整的其他数组,但你不需要。 – bobobobo 2013-04-10 01:05:39

+0

这给了一个错误“AttributeError:'list'object has no attribute'delete'”建议? – Praxiteles 2016-03-18 19:38:38