web-dev-qa-db-ja.com

App Engine:データストアを「リセット」する方法は?

ええと、私はApp Engine(Java)で開発していて、何度も試行錯誤した後、データストアをリセットする必要があります。テストパフォーマンスに追加したランダムデータがたくさんあり、それに加えてエンティティが大幅に変更されたため、データ、テーブル、インデックスのすべてを削除する必要があります。

どうやってやるの?

29
Damian

SQLにはDROPTABLEまたはTRUNCATETABLEに相当する組み込みコマンドはありません。アプリで「すべて削除」ページを作成し、スクリプトを介してそのページを繰り返し呼び出す必要があります。そのページで、リクエストがタイムアウトする前に完了すると合理的に期待できる限り多くのエンティティを削除する必要があります。正確なコードは、JDO/JPAと低レベルAPIのどちらを使用しているかによって異なります。 (バッチ操作を使用できるため、低レベルAPIの方が高速になります。)

この SO質問はほとんど同じですが、Pythonの場合のみです

16
Peter Recore

このスレッドを起こして申し訳ありませんが、私のような初心者のためのヒントを追加したい場合に備えて(最終的にグーグルのドキュメントで答えを見つけました):

Localデータストアを一度にリセットする場合(たとえば、Eclipseを使用して開発している場合)、サーバーをシャットダウンし、プロジェクトでファイル 'local_db.bin'を見つけます。 (WEB-INF/appengine-generated /ディレクトリにある必要があります)、それを削除します。

Javaで正常に動作しますが、pythonではまだ試していません。

++

30
Kohistan

開発サーバーデータストアのクリア

開発Webサーバーは、一時ファイルを使用して、アプリケーションをテストするためにローカルバージョンのデータストアを使用します。データは一時ファイルが存在する限り存続し、Webサーバーは、要求されない限り、これらのファイルをリセットしません。

開発サーバーで起動前にデータストアを消去する場合は、サーバーの起動時に--clear_datastoreオプションを使用します。

dev_appserver.py --clear_datastore helloworld /

データストアの使用

16
Tamas Kalman

フィルタなしでクエリを実行してすべてのエンティティをフェッチし、それらを1つずつ削除するだけです。

import javax.servlet.http.*;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;

public class MyServlet extends HttpServlet {
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        DatastoreService datastore = 
                    DatastoreServiceFactory.getDatastoreService();

    Query mydeleteq = new Query();
    PreparedQuery pq = datastore.prepare(mydeleteq);
    for (Entity result : pq.asIterable()) {
        datastore.delete(result.getKey());      
    }   
}
9

これに遅れて申し訳ありませんが、私は自分で同じことをしようとしていました...

アカウント(appengine.google.com)にログインし、作成/更新/削除を許可する管理ユーティリティ(datastore/dataviewer)を介してデータストアを参照するオプションを見つけました。

4
DanDan

GAEのドキュメントによると、JDOで複数のオブジェクトを削除するには、オブジェクトのコレクションを使用してPersistenceManagerのdeletePersistentAll(...)メソッドを呼び出します。

PersistenceManager pm = PMF.get().getPersistenceManager();

Query query = pm.newQuery("select from " + Your.class);

List<Your> objs = (List<Your>) query.execute();

pm.deletePersistentAll(objs);
2
FredArters

アプリケーションのデータのすべて(または一部)を削除すると、管理コンソールの一部になります

この機能を有効にするには、app.yamlファイルで次の組み込みを有効にするだけです。

builtins:
- datastore_admin: on

これらの行をapp.yamlに追加すると、アプリの管理コンソールの[データストア管理]ページが有効になります

2
jonmiddleton

ローカルデータの削除は、 http:// localhost:8000/datastore を開くことで実行できます。

1
Yash Sharma

プロジェクトでMavenを使用する場合は、「mvncleaninstall」を実行するだけです。もちろん、これによりデータストアがローカルにリセットされます。

1
Dennis De Reyer

Java devのコンテキスト外ですが、ドキュメントがほとんどないため、goでそれを行う方法を次に示します。

keys, _ := datastore.NewQuery("").KeysOnly().GetAll(c, nil)
datastore.DeleteMulti(c, keys)
1
Solido

私の場合(EclipseプラグインとPlay Frameworkを使用)、アプリケーションを停止し、ファイル/ apps/crud-gae/tmp/datastoreを削除してから、アプリを再起動する必要がありました。

それは私のために働いた...もちろん、ローカルで働いている...

0
opensas

ローカルで作業している場合、Windows7ではファイルはuser\UserName\AppData\Local\Temp\dev_appserver.datastoreです。

0
user1055761

役立つ情報をもう少し追加するには:Eclipseを使用していて、ローカルデータストアをクリアしたい場合は、次のコンソールメッセージを探してください。

INFO: Local Datastore initialized: 
Storage: C:\Users\eric\workspace\.metadata\.plugins\org.Eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin

データストアの初期化を強制するために何かを行った後にのみ表示されます。これにより、管理ページのエンティティリストが更新される可能性があります。次に、サーバーを停止してファイルを削除すると、再起動すると次のように表示されます。

INFO: The backing store, C:\Users\eric\workspace\.metadata\.plugins\org.Eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin, does not exist. It will be created.
0
Eric McNeill

Google Coursebuilderでアプリエンジンを使用していたため、次のコマンドを使用してデータストアをクリアする必要がありました。

python dev_appserver.py --clear_datastore /path/to/app
0
cwd