ええと、私はApp Engine(Java)で開発していて、何度も試行錯誤した後、データストアをリセットする必要があります。テストパフォーマンスに追加したランダムデータがたくさんあり、それに加えてエンティティが大幅に変更されたため、データ、テーブル、インデックスのすべてを削除する必要があります。
どうやってやるの?
SQLにはDROPTABLEまたはTRUNCATETABLEに相当する組み込みコマンドはありません。アプリで「すべて削除」ページを作成し、スクリプトを介してそのページを繰り返し呼び出す必要があります。そのページで、リクエストがタイムアウトする前に完了すると合理的に期待できる限り多くのエンティティを削除する必要があります。正確なコードは、JDO/JPAと低レベルAPIのどちらを使用しているかによって異なります。 (バッチ操作を使用できるため、低レベルAPIの方が高速になります。)
この 前 SO質問はほとんど同じですが、Pythonの場合のみです
このスレッドを起こして申し訳ありませんが、私のような初心者のためのヒントを追加したい場合に備えて(最終的にグーグルのドキュメントで答えを見つけました):
Localデータストアを一度にリセットする場合(たとえば、Eclipseを使用して開発している場合)、サーバーをシャットダウンし、プロジェクトでファイル 'local_db.bin'を見つけます。 (WEB-INF/appengine-generated /ディレクトリにある必要があります)、それを削除します。
Javaで正常に動作しますが、pythonではまだ試していません。
++
開発サーバーデータストアのクリア
開発Webサーバーは、一時ファイルを使用して、アプリケーションをテストするためにローカルバージョンのデータストアを使用します。データは一時ファイルが存在する限り存続し、Webサーバーは、要求されない限り、これらのファイルをリセットしません。
開発サーバーで起動前にデータストアを消去する場合は、サーバーの起動時に--clear_datastoreオプションを使用します。
dev_appserver.py --clear_datastore helloworld /
フィルタなしでクエリを実行してすべてのエンティティをフェッチし、それらを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());
}
}
これに遅れて申し訳ありませんが、私は自分で同じことをしようとしていました...
アカウント(appengine.google.com)にログインし、作成/更新/削除を許可する管理ユーティリティ(datastore/dataviewer)を介してデータストアを参照するオプションを見つけました。
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);
アプリケーションのデータのすべて(または一部)を削除すると、管理コンソールの一部になります
この機能を有効にするには、app.yamlファイルで次の組み込みを有効にするだけです。
builtins:
- datastore_admin: on
これらの行をapp.yamlに追加すると、アプリの管理コンソールの[データストア管理]ページが有効になります
ローカルデータの削除は、 http:// localhost:8000/datastore を開くことで実行できます。
プロジェクトでMavenを使用する場合は、「mvncleaninstall」を実行するだけです。もちろん、これによりデータストアがローカルにリセットされます。
Java devのコンテキスト外ですが、ドキュメントがほとんどないため、goでそれを行う方法を次に示します。
keys, _ := datastore.NewQuery("").KeysOnly().GetAll(c, nil)
datastore.DeleteMulti(c, keys)
私の場合(EclipseプラグインとPlay Frameworkを使用)、アプリケーションを停止し、ファイル/ apps/crud-gae/tmp/datastoreを削除してから、アプリを再起動する必要がありました。
それは私のために働いた...もちろん、ローカルで働いている...
ローカルで作業している場合、Windows7ではファイルはuser\UserName\AppData\Local\Temp\dev_appserver.datastoreです。
役立つ情報をもう少し追加するには: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.
Google Coursebuilderでアプリエンジンを使用していたため、次のコマンドを使用してデータストアをクリアする必要がありました。
python dev_appserver.py --clear_datastore /path/to/app