2012-01-05 56 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