2012-01-05 10 views
8

私のデータストアのすべてのレコードを繰り返して削除する必要があります。私は、ローカルホスト上でテストするためにGoogle App Engine Launcherを使用しています。どうやってするの?GQLを使用してレコードを削除するには?

私はそのように人モデル内のすべてのrecorsを削除しようとしています:私はエラーBadValueError: Property y must be a str or unicode instance, not a long を取得しています

qObj = Person.all() 
db.delete(qObj) 

私はモデルのデータ型での競合があると思います。

class Person(db.Model): 
    name = db.StringProperty() 
    x = db.StringProperty() 
    y = db.StringProperty() 
    group = db.StringProperty() 

フィールドy = db.StringProperty()は、以前y = db.IntegerProperty()ました。 この時点で私はすべてのdbレコードをフラッシュする必要があります。どうやってやるの?

すべてのdbレコードを保存するローカルファイルを削除する機会はありますか?

+0

qObj = Person.all()を実行すると、qObjにPersonオブジェクトのリストが設定されます。私が知る限り、そのリストでdeleteを呼び出すことはできません。リストを繰り返し処理し、各オブジェクトを個別に削除する必要があります。 – pinerd314159

+0

http://code.google.com/appengine/docs/python/datastore/functions.html#create_config ... delete(models) データストアから1つ以上のモデルインスタンスを削除します。 引数: モデル モデルインスタンス、エンティティのキ​​ー、または削除するエンティティのモデルインスタンスまたはキーのリスト(またはその他の反復可能)。 –

+0

私はちょうど['db.delete(Person.all())'](https://developers.google。あなたの正確な 'Person'モデルを使用して完全に動作します(dbからすべての' Person'オブジェクトをクリアします) – bobobobo

答えて

8

GQL言語のみエンティティまたはあなたがこれを行う必要があるでしょう

キー(参照http://code.google.com/appengine/docs/python/datastore/gqlreference.html)を取得するために使用することができます。エラーBadValueError: Property y must be a str or unicode instance, not a longについて

persons = Person.all() 

for p in persons: 
    p.delete() 

を、あなたがする必要があります競合を解決するために、データベース内のすべてのデータ(整数から文字列まで)を変更します。

すべてを削除したいと思うので、もう1つの解決策は、ローカルホストのhttp://localhost:8080/_ah/adminまたはhttps://appengine.google.com/を介してデータストア管理ページに行き、すべてを削除することです。

あなたは、これは便利かもしれません:http://code.google.com/appengine/articles/update_schema.html

+0

これは__not correct__です。明示的な 'for'は必要ありません。これは修正されているか、何かが間違っていた – bobobobo

1

データベースにレコードを格納する変数がある場合は、単にdelete()を使用できます。

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

は、データベースライブラリをインポートすることも持っていますが、私はとにかくあなたがしていることを考えることをあなたが行うと仮定しています:、あなたはエンティティ者と呼ばれ、あなたが行うことができます持っていると言っている

明らかにデータベースを使用しています。

+0

これは私たちにエラーを与えます: 'Query'オブジェクトはエラーを返します。インデックス作成をサポートします。何が足りないの? – Praxiteles

0

ただ、すでに受け入れ答えに役立つヒントを共有します。

あなたはdb.deleteで、次の操作を行うことができます

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

db.delete(d) 

これは、DB操作の多くを保存します。

+0

私はこれが非常に非効率的だと思います。他の配列全体を作成していますが、必要はありません。 – bobobobo

+0

これはエラー "AttributeError: 'list'オブジェクトに属性 'delete'" Suggestions "がありませんでしたか? – Praxiteles

関連する問題