私は App Engine (Java) で開発を行っていますが、何度も試行してデプロイした後、データストアをリセットする必要があります。パフォーマンスをテストするために追加したランダム データがたくさんあります。また、エンティティが大幅に変更されたため、データ、テーブル、インデックスのすべてを削除する必要があります。
どうやってやるの?
私は App Engine (Java) で開発を行っていますが、何度も試行してデプロイした後、データストアをリセットする必要があります。パフォーマンスをテストするために追加したランダム データがたくさんあります。また、エンティティが大幅に変更されたため、データ、テーブル、インデックスのすべてを削除する必要があります。
どうやってやるの?
このスレッドを起こして申し訳ありませんが、念のために私のような初心者のためのヒントを追加したい場合に備えて(最終的にグーグルのドキュメントで答えを見つけました):
ローカルデータストアを一度にリセットする場合(たとえば、Eclipseを使用して開発している場合)、サーバーをシャットダウンし、プロジェクトでファイル' local_db.bin 'を見つけます(WEB-INF / appengine-generated /ディレクトリにある必要があります)。 )、それを削除します。
Javaで正常に動作しますが、Pythonではまだ試していません。
++
開発サーバー データストアのクリア
開発用 Web サーバーは、ローカル バージョンのデータストアを使用してアプリケーションをテストし、一時ファイルを使用します。一時ファイルが存在する限り、データは保持されます。ユーザーが要求しない限り、Web サーバーはこれらのファイルをリセットしません。
起動前に開発サーバーのデータストアを消去する場合は、サーバーの起動時に --clear_datastore オプションを使用します。
dev_appserver.py --clear_datastore helloworld/
SQLにはDROPTABLEまたはTRUNCATETABLEに相当する組み込みコマンドはありません。アプリで「すべて削除」ページを作成し、スクリプトを介してそのページを繰り返し呼び出す必要があります。そのページでは、リクエストがタイムアウトする前に終了することが合理的に期待できる限り多くのエンティティを削除する必要があります。正確なコードは、JDO/JPAを使用しているか低レベルAPIを使用しているかによって異なります。(バッチ操作を使用できるため、低レベルAPIの方が高速になります。)
この前のSOの質問は、Pythonの場合のみ、ほとんど同じです。
フィルターなしでクエリを実行してすべてのエンティティを取得し、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) にログインすると、作成/更新/削除が可能な管理ユーティリティ (データストア/データビューアー) を使用してデータストアを参照するオプションが見つかりました。
GAE docs によると、JDO で複数のオブジェクトを削除できます。PersistenceManager の deletePersistentAll(...) メソッドをオブジェクトの Collection で呼び出します。
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 に追加すると、アプリの管理コンソールで「データストア管理」ページが有効になります
私の場合(EclipseプラグインとPlay Frameworkを使用)、アプリケーションを停止し、ファイル/ apps / crud-gae / tmp / datastoreを削除してから、アプリを再起動する必要がありました。
それは私のために働いた...もちろん、ローカルで働いている...
Windows 7 でローカルで作業する場合、ファイルは user\UserName\AppData\Local\Temp\dev_appserver.datastore です。
役立つ情報をもう 1 つ追加するには: 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