Google App Engine에서 모든 데이터 저장소를 삭제하는 방법은 무엇입니까?


122

누구든지 Google App Engine 에서 모든 데이터 저장소를 삭제하는 방법을 알고 있습니까?


2
db.delete (db.Query (keys_only = True)). 자세한 내용은 여기 stackoverflow.com/a/10856555/290340 .
Evan Plaice 2012-06-01

4
아래 @systempuntoout에서 지적했듯이 GAE에는 이제 코딩없이 항목을 대량으로 삭제할 수 있는 Datastore 관리자 가 있습니다. 이 기능은 세 번째 의견에 묻히지 않고 여기에 표시되어야합니다.
ralfoide

Datastore 관리자가 작동하지 않으므로 (페이지가 존재하지 않는 호스트에 iframe을로드 함) db.delete 메소드를 사용해야합니다.

개발 서버의 모든 데이터를 삭제하려면 cmd 프롬프트에서 다음을 실행 /path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/ 하십시오 . 여기서 myappname은 앱의 app.yaml 파일이 포함 된 디렉토리입니다.이 디렉토리 경로로 cd해야합니다. 크레딧 : Steven Almeroth 및 Melllvar (아래 답변)
gsinha 2014 년

답변:


69

라이브 데이터 저장소 에 대해 이야기하는 경우 앱의 대시 보드를 열고 (appengine에 로그인) 데이터 저장소-> dataviewer를 열고 삭제하려는 테이블의 모든 행을 선택한 다음 삭제 버튼을 누릅니다. 모든 테이블에 대해 이렇게하십시오). remote_api를 통해 프로그래밍 방식으로 동일한 작업을 수행 할 수 있습니다 (하지만 사용하지 않았습니다).

개발 데이터 저장소 에 대해 이야기하는 경우 "./WEB-INF/appengine-generated/local_db.bin" 파일을 삭제하기 만하면 됩니다. 다음에 개발 서버를 실행할 때 파일이 다시 생성되고 명확한 db가 생성됩니다.

나중에 프로젝트를 청소하십시오.

이것은 Google Application Engine으로 게임을 시작할 때 편리하게 사용할 수있는 작은 문제 중 하나입니다. 개체를 데이터 저장소에 유지 한 다음 지속 가능한 엔터티에 대한 JDO 개체 모델을 변경하면 쓸모없는 데이터로 끝나고 앱이 모든 곳에서 충돌하게됩니다.


16
개발 데이터 저장소에서 삭제할 dev_appserver.py에 대한 -c 매개 변수가 있습니다.
svrist

1
@svrist하지만 이는 Python 앱 엔진에만 적용됩니다. 아무도 Java에서 수행하는 지름길을 알고 있습니까? (한편, JohnIdol의 제안은 잘 작동합니다.)
mgiuca

2
감사합니다 @John : MAC OSX의 정확한 경로는 어디입니까?
George Nguyen

3
Windows에서 경로는 어디에 있습니까?
Shane Best

2
@ShaneBest 창에서 경로 ./target/yourappid-1.0-SNAPSHOT/WEB-INF/appengine-generated/local_db.bin 같은 것입니다
모피어스

58

최선의 접근 방식은 Nick이 제안한 원격 API 방법입니다. 그는 GoogleApp Engine 엔지니어 이므로 그를 믿으세요.

그렇게 어렵지 않으며 최신 1.2.5 SDK는 선반에서 remote_shell_api.py를 제공합니다. 새 SDK를 다운로드하십시오. 그런 다음 다음 단계를 따르십시오.

  • 명령 줄에서 원격 서버 연결 : remote_shell_api.py yourapp /remote_api 셸은 로그인 정보를 요청하고 권한이있는 경우 Python 셸을 만듭니다. app.yaml에서 / remote_api에 대한 설정 URL 핸들러가 필요합니다.

  • 삭제하려는 항목을 가져 오면 코드는 다음과 같습니다.

    from models import Entry
    query = Entry.all(keys_only=True)
    entries =query.fetch(1000)
    db.delete(entries)
    \# This could bulk delete 1000 entities a time

2013-10-28 업데이트 :

  • remote_shell_api.py이 (가)로 바뀌 었으므로 설명서 에 따라 remote_api_shell.py와 연결해야합니다 .remote_api_shell.py -s your_app_id.appspot.com

  • 새로운 실험 기능인 Datastore Admin 이 있습니다. 앱 설정에서 사용 설정 한 후 웹 UI를 통해 데이터 저장소를 일괄 삭제하고 백업 할 수 있습니다.


17
사실, 가져 오기가 필요하지 않습니다. db.delete (Entry.all ()) 만하면됩니다.
다운로드

4
500 개의 엔티티 세트에서이 작업을 수행해야합니다. 그렇지 않으면 다음과 같은 결과가 나타납니다. BadRequestError : 단일 호출에서 500 개 이상의 엔티티를 삭제할 수 없습니다
marcc

1
참고로 원격 API를 사용하려면 먼저 YAML 파일에서 builtins :-remote_api :를 사용하여 애플리케이션에서 활성화해야합니다. 더 많은 정보는에있다 developers.google.com/appengine/articles/remote_api
ZAFFIRO

2
Entry.all ()을 호출 할 때 최소한 'keys_only = True'를 추가하십시오. 데이터를 확인할 필요가 없으면 전체 항목을 가져올 필요가 없습니다. 그렇지 않으면 컴퓨팅 사이클을 낭비하고 있습니다.
Evan Plaice 2012 년

1
+1 ...하지만 : 2013 년 현재 remote_shell_api.py는 존재하지 않습니다. 현재 스크립트 이름은 remote_api_shell.py입니다. 또한 ndb (요즘 대부분의 사람들이하는 일)를 사용한다면 ndb.delete_multi (model.Entry.query (). fetch (keys_only = True)를 사용하는 권장 방법)
Uri

27

Datastore에서 대량 삭제를 처리하는 가장 빠르고 효율적인 방법 은 최신 Google I / O 에 발표 된 새로운 매퍼 API 를 사용하는 것 입니다.

선택한 언어가 Python 이면 mapreduce.yaml 파일에 매퍼를 등록 하고 다음과 같은 함수를 정의하기 만하면 됩니다.

from mapreduce import operation as op
def process(entity):
 yield op.db.Delete(entity)

자바 당신은에보고해야한다 이 문서 같은 기능을 제안한다 :

@Override
public void map(Key key, Entity value, Context context) {
    log.info("Adding key to deletion pool: " + key);
    DatastoreMutationPool mutationPool = this.getAppEngineContext(context)
            .getMutationPool();
    mutationPool.delete(value.getKey());
}

수정 :
SDK 1.3.8부터이 목적을위한 Datastore 관리 기능 이 있습니다.


27

서버 를 실행할 때 개발 서버 데이터 저장소를 지울 수 있습니다 .

/path/to/dev_appserver.py --clear_datastore=yes myapp

또한 축약 할 수 있습니다 --clear_datastore-c.


5
최근의 것인지 확실하지 않지만 실제 구문은 지금입니다 /path/to/google_appengine/dev_appserver.py --clear_datastore yes myappname/( 'yes'에주의)
Melllvar

개발 중에 데이터 저장소를 반복적으로 삭제하는 가장 유용한 방법입니다. 옵션은 오래된 빨리지고, 그것은 가치가이 플래그 7 월 2018 아직도 그 자리에, 그리고 dev_appserver에 대한 작품 gcloud의 CLI를 통해 설치 하이라이트
마이클

Google Cloud SDK 버전 270.0.0에서 '--clear_datastore = yes'는 여전히 등호로 작동합니다
franksands

15

많은 양의 데이터가있는 경우 스크립트를 사용하여 삭제해야합니다. 하지만 remote_api를 사용하여 간단한 방식으로 클라이언트 측에서 데이터 저장소를 지울 수 있습니다.


11

시작합니다. 데이터 저장소 관리자로 이동 한 다음 삭제할 항목 유형을 선택하고 삭제를 클릭합니다. Mapreduce가 삭제를 처리합니다!


9

App Engine의 Datastore에서 항목을 제거하는 데 사용할 수있는 몇 가지 방법이 있습니다.

여기에 이미지 설명 입력

  1. 먼저 항목을 정말로 제거해야하는지 생각해보십시오. 이것은 비싸고 제거하지 않는 것이 더 저렴할 수 있습니다.

  2. Datastore 관리자를 사용하여 모든 항목을 직접 삭제할 수 있습니다.

  3. Remote API를 사용하고 대화식으로 항목을 제거 할 수 있습니다.

  4. 몇 줄의 코드를 사용하여 프로그래밍 방식으로 항목을 제거 할 수 있습니다.

  5. 작업 대기열 및 커서를 사용하여 대량으로 제거 할 수 있습니다.

  6. 또는 Mapreduce를 사용하여 더 강력하고 멋진 것을 얻을 수 있습니다.

이러한 각 방법은 다음 블로그 게시물에 설명되어 있습니다. http://www.shiftedup.com/2015/03/28/how-to-bulk-delete-entries-in-app-engine-datastore

도움이 되었기를 바랍니다.


6

이 작업을 수행하는 제로 설정 방법은 실행중인 앱이 이미 자동으로 가지고있는 관리 서비스에 임의 코드 실행 HTTP 요청을 보내는 것입니다.

import urllib
import urllib2

urllib2.urlopen('http://localhost:8080/_ah/admin/interactive/execute',
    data = urllib.urlencode({'code' : 'from google.appengine.ext import db\n' +
                                      'db.delete(db.Query())'}))

이것은 개발 서버에서만 작동합니다. 생산에 상응하는 것이 있습니까?
Gady 2011 년

3

출처

나는 이것을 얻었다 http://code.google.com/appengine/articles/remote_api.html .

대화 형 콘솔 만들기

먼저 대화 형 appenginge 콘솔을 정의해야합니다. 따라서 appengine_console.py라는 파일을 만들고 다음을 입력합니다.

#!/usr/bin/python
import code
import getpass
import sys

# These are for my OSX installation. Change it to match your google_appengine paths. sys.path.append("/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine")
sys.path.append("/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/yaml/lib")

from google.appengine.ext.remote_api import remote_api_stub
from google.appengine.ext import db

def auth_func():
  return raw_input('Username:'), getpass.getpass('Password:')

if len(sys.argv) < 2:
  print "Usage: %s app_id [host]" % (sys.argv[0],)
app_id = sys.argv[1]
if len(sys.argv) > 2:
  host = sys.argv[2]
else:
  host = '%s.appspot.com' % app_id

remote_api_stub.ConfigureRemoteDatastore(app_id, '/remote_api', auth_func, host)

code.interact('App Engine interactive console for %s' % (app_id,), None, locals())



매퍼 기본 클래스 만들기

그것이 제자리에 있으면이 Mapper 클래스를 만듭니다. 방금 utils.py라는 새 파일을 만들고 다음을 던졌습니다.

class Mapper(object):
  # Subclasses should replace this with a model class (eg, model.Person).
  KIND = None

  # Subclasses can replace this with a list of (property, value) tuples to filter by.
  FILTERS = []

  def map(self, entity):
    """Updates a single entity.

    Implementers should return a tuple containing two iterables (to_update, to_delete).
    """
    return ([], [])

  def get_query(self):
    """Returns a query over the specified kind, with any appropriate filters applied."""
    q = self.KIND.all()
    for prop, value in self.FILTERS:
      q.filter("%s =" % prop, value)
    q.order("__key__")
    return q

  def run(self, batch_size=100):
    """Executes the map procedure over all matching entities."""
    q = self.get_query()
    entities = q.fetch(batch_size)
    while entities:
      to_put = []
      to_delete = []
      for entity in entities:
        map_updates, map_deletes = self.map(entity)
        to_put.extend(map_updates)
        to_delete.extend(map_deletes)
      if to_put:
        db.put(to_put)
      if to_delete:
        db.delete(to_delete)
      q = self.get_query()
      q.filter("__key__ >", entities[-1].key())
      entities = q.fetch(batch_size)

Mapper는 데이터를 추출하거나 데이터를 수정하고 업데이트 된 항목을 데이터 저장소에 다시 저장할 수 있도록 지정된 종류의 모든 항목을 반복 할 수있는 추상 클래스 여야합니다.

그것으로 실행하십시오!

이제 appengine 대화 형 콘솔을 시작합니다.

$python appengine_console.py <app_id_here>

그러면 대화 형 콘솔이 시작됩니다. 여기에서 Model의 하위 클래스를 만듭니다.

from utils import Mapper
# import your model class here 
class MyModelDeleter(Mapper):
    KIND = <model_name_here>

    def map(self, entity):
        return ([], [entity])

마지막으로 대화 형 콘솔에서 실행합니다. mapper = MyModelDeleter () mapper.run ()

그게 다야!


3

웹 인터페이스를 사용하여 할 수 있습니다. 계정에 로그인하고 왼쪽에있는 링크로 이동합니다. 데이터 저장소 관리에는 데이터를 수정하고 삭제할 수있는 옵션이 있습니다. 각 옵션을 사용하십시오.


3

배포 된 App Engine 앱과 함께 사용할 수있는 추가 기능 패널을 만들었습니다. 드롭 다운에 데이터 저장소에있는 종류가 나열되며 버튼을 클릭하여 특정 종류의 모든 항목 또는 단순히 모든 항목을 삭제하는 "작업"을 예약 할 수 있습니다. http://code.google.com/p/jobfeed/wiki/Nuke에서 다운로드 할 수 있습니다
.


3

Python의 경우 1.3.8에는이를위한 실험적 관리자가 내장되어 있습니다. 그들은 다음과 같이 말합니다 . "app.yaml 파일에서 다음 내장 기능을 활성화합니다."

builtins:
- datastore_admin: on

"데이터 저장소 삭제는 현재 Python 런타임에서만 사용할 수 있습니다.하지만 자바 애플리케이션은 app.yaml에서 Datastore 관리자를 사용하도록 설정하는 기본이 아닌 Python 애플리케이션 버전을 만들어이 기능을 계속 활용할 수 있습니다. 자바에 대한 기본 지원이 포함됩니다. 곧 출시 될 예정입니다. "


app.yaml에 구성을 추가하면 오류가 발생했습니다. 대신 '관리'섹션의 '애플리케이션 설정'페이지에서 활성화 할 수 있습니다. 활성화하는 버튼이 있습니다
Sundeep dec

3

애플리케이션의 "Datastore Admin"을 열고 Admin을 활성화합니다. 그러면 모든 엔터티가 확인란과 함께 나열됩니다. 원치 않는 항목을 선택하고 삭제할 수 있습니다.


3

이것이 당신이 찾고있는 것입니다 ...

db.delete(Entry.all(keys_only=True))

키 전용 쿼리를 실행하면 전체 가져 오기보다 훨씬 빠르며 키 전용 쿼리는 소규모 작업으로 간주되기 때문에 할당량이 적습니다.

여기에 더 자세히 설명하는 Nick Johnson 의 답변에 대한 링크가 있습니다.

아래는 테이블 자르기에 대한 종단 간 REST API 솔루션입니다.

라우팅이 적절한 모델 / 액션에 직접 매핑되는 데이터베이스 트랜잭션을 처리하기 위해 REST API를 설정했습니다. 올바른 URL (example.com/inventory/truncate)을 입력하고 로그인하여 호출 할 수 있습니다.

경로는 다음과 같습니다.

Route('/inventory/truncate', DataHandler, defaults={'_model':'Inventory', '_action':'truncate'})

핸들러는 다음과 같습니다.

class DataHandler(webapp2.RequestHandler):
  @basic_auth
  def delete(self, **defaults):
    model = defaults.get('_model')
    action = defaults.get('_action')
    module = __import__('api.models', fromlist=[model])
    model_instance = getattr(module, model)()
    result = getattr(model_instance, action)()

모델을 동적으로로드 (예 : api.models 아래에있는 인벤토리) 한 다음 작업 매개 변수에 지정된대로 올바른 메서드 (Inventory.truncate ())를 호출합니다.

@basic_auth는 민감한 작업 (예 : POST / DELETE)에 대한 인증을 제공하는 데코레이터 / 래퍼입니다. 보안이 우려되는 경우 사용할 수 있는 oAuth 데코레이터도 있습니다.

마지막으로 액션이 호출됩니다.

def truncate(self):
  db.delete(Inventory.all(keys_only=True))

마법처럼 보이지만 실제로는 매우 간단합니다. 가장 좋은 점은 delete ()를 재사용하여 모델에 다른 작업을 추가하여 하나 또는 여러 결과 삭제를 처리 할 수 ​​있다는 것입니다.


3

모든 종류를 하나씩 삭제하여 모든 데이터 스토어를 삭제할 수 있습니다. Google appengine 대시 보드로. 다음 단계를 따르십시오.

  1. https://console.cloud.google.com/datastore/settings에 로그인합니다.
  2. Open Datastore Admin을 클릭합니다 . (활성화되지 않은 경우 활성화하십시오.)
  3. 모든 엔티티를 선택하고 삭제를 누릅니다. (이 단계에서는 선택한 모든 종류를 삭제하기위한 맵 축소 작업을 실행합니다.)

자세한 내용은이 이미지 http://storage.googleapis.com/bnifsc/Screenshot%20from%202015-01-31%2023%3A58%3A41.png를 참조하세요.


2

데이터가 많은 경우 웹 인터페이스를 사용하는 데 시간이 많이 걸릴 수 있습니다. 앱 엔진 런처 유틸리티는 당신에게 체크 박스 '출시에 대한 명확한 데이터 스토어'와 한 번에 삭제 모든 것을 할 수 있습니다. 이 유틸리티는 이제 Windows와 Mac (Python 프레임 워크) 모두에서 사용할 수 있습니다.


2

개발 서버의 경우 Google 앱 엔진 런처를 통해 서버를 실행하는 대신 다음과 같이 터미널에서 실행할 수 있습니다.

dev_appserver.py --port = [portnumber] --clear_datastore = yes [애플리케이션 이름]

예 : 내 응용 프로그램 "reader"는 포트 15080에서 실행됩니다. 코드를 수정하고 서버를 다시 시작한 후 "dev_appserver.py --port = 15080 --clear_datastore = yes reader"를 실행합니다.

나에게 좋다.



1

나는 종종 모든 데이터 저장소를 삭제하고 싶지 않기 때문에 소스 제어에서 /war/WEB-INF/local_db.bin의 깨끗한 복사본을 가져옵니다. 나일 수도 있지만 Dev Mode가 중지 된 상태에서도 파일을 가져 오기 전에 물리적으로 제거해야하는 것 같습니다. 이것은 Eclipse 용 Subversion 플러그인을 사용하는 Windows에 있습니다.


0

PHP 변형 :

import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.DatastoreServiceFactory;

define('DATASTORE_SERVICE', DatastoreServiceFactory::getDatastoreService());

function get_all($kind) {
    $query = new Query($kind);
    $prepared = DATASTORE_SERVICE->prepare($query);
    return $prepared->asIterable();
}

function delete_all($kind, $amount = 0) {
    if ($entities = get_all($kind)) {
        $r = $t = 0;
        $delete = array();
        foreach ($entities as $entity) {
            if ($r < 500) {
                $delete[] = $entity->getKey();
            } else {
                DATASTORE_SERVICE->delete($delete);
                $delete = array();
                $r = -1;
            }
            $r++; $t++;
            if ($amount && $amount < $t) break;
        }
        if ($delete) {
            DATASTORE_SERVICE->delete($delete);
        }
    }
}

네, 시간과 30 초가 걸립니다. 한계입니다. 30 초 이상 자동화하기 위해 ajax 앱 샘플을 넣을 생각입니다.


이것은 유효한 PHP가 아닙니다. import? 상수를 개체 인스턴스로 정의 하시겠습니까?
Josh J

0
for amodel in db.Model.__subclasses__():
                dela=[]
                print amodel
                try:
                    m = amodel()
                    mq = m.all()
                    print mq.count()
                    for mw in mq:
                        dela.append(mw)
                    db.delete(dela)
            #~ print len(dela)

                except:
                    pass

0

ndb를 사용하는 경우 데이터 저장소를 지우는 데 도움이 된 방법은 다음과 같습니다.

ndb.delete_multi(ndb.Query(default_options=ndb.QueryOptions(keys_only=True)))

1
나는 이것이 작동하지 않을 것이라고 생각합니다. 에 대해 AppEngine에 불평 Sorry, unexpected error: The kind "__Stat_Kind__" is reserved.이 AppEngine에이 방법에 의해 노출 될 수있는 내부 통계 실체가 보인다 (그 끝에 가능한 버그?)
disappearedng

0

로컬이 아닌 App Engine에있는 모든 데이터 저장소의 경우 새로운 Datastore API를 사용할 수 있습니다 . 여기 시작하는 방법에 대한 프라이머 .

빌드되지 않은 모든 엔티티를 삭제하는 스크립트를 작성했습니다. API가 매우 빠르게 변경되고 있으므로 참조를 위해 커밋 990ab5c7f2063e8147bcc56ee222836fd3d6e15b 에서 복제했습니다.

from gcloud import datastore
from gcloud.datastore import SCOPE
from gcloud.datastore.connection import Connection
from gcloud.datastore import query

from oauth2client import client

def get_connection():
  client_email = 'XXXXXXXX@developer.gserviceaccount.com'
  private_key_string = open('/path/to/yourfile.p12', 'rb').read()

  svc_account_credentials = client.SignedJwtAssertionCredentials(
    service_account_name=client_email,
    private_key=private_key_string,
    scope=SCOPE)

  return Connection(credentials=svc_account_credentials)


def connect_to_dataset(dataset_id):
  connection = get_connection()
  datastore.set_default_connection(connection)
  datastore.set_default_dataset_id(dataset_id)

if __name__ == "__main__":
  connect_to_dataset(DATASET_NAME)
  gae_entity_query = query.Query()
  gae_entity_query.keys_only()
  for entity in gae_entity_query.fetch():
    if entity.kind[0] != '_':
      print entity.kind
      entity.key.delete()

0
  • svpino의 아이디어를 계속해서 삭제로 표시된 레코드를 재사용하는 것이 현명합니다. (그의 아이디어는 제거하는 것이 아니라 사용하지 않는 레코드를 "삭제 된"것으로 표시하는 것이 었습니다). 작업 복사본을 처리하고 원하는 작업 전후의 상태 차이 만 데이터 저장소에 쓰는 데 약간의 캐시 / memcache를 사용하면 더 좋습니다. 큰 작업의 경우 memcache가 사라진 경우 데이터 손실을 방지하기 위해 데이터 저장소에 반복적 인 차이 청크를 쓸 수 있습니다. 손실 방지를 위해 memcached 결과의 무결성 / 존재를 확인하고 작업 (또는 필수 부분)을 다시 시작하여 누락 된 계산을 반복 할 수 있습니다. 데이터 차이가 데이터 저장소에 기록되면 필요한 계산이 대기열에서 삭제됩니다.

  • 축소 된지도와 유사한 다른 아이디어는 항목 종류를 여러 다른 항목 종류로 분할하는 것이므로 함께 수집되어 최종 사용자에게 단일 항목 종류로 표시됩니다. 항목은 "삭제됨"으로 만 표시됩니다. 샤드 당 "삭제 된"항목 양이 일부 제한을 초과하면 "살아있는"항목이 다른 샤드간에 배포되고이 샤드는 영원히 닫히고 개발 콘솔에서 수동으로 삭제됩니다 (더 적은 비용으로 추측) upd : 콘솔에서 드롭 테이블이없는 것 같습니다. 정상 가격으로 레코드별로 만 삭제하십시오.

  • 시간이 끝났을 때 다음 시도를 계속할 수있는 가능성과 함께 gae에 실패하지 않고 (적어도 로컬에서 작동하는) 큰 레코드 집합을 청크별로 쿼리하여 삭제할 수 있습니다.


    qdelete.getFetchPlan().setFetchSize(100);

    while (true)
    {
        long result = qdelete.deletePersistentAll(candidates);
        LOG.log(Level.INFO, String.format("deleted: %d", result));
        if (result <= 0)
            break;
    }
  • 또한 후보 (관련 레코드)를 별도의 테이블에 넣는 대신 기본 테이블에 추가 필드를 만드는 것이 유용 할 수도 있습니다. 그리고 예, 필드는 계산 비용이 거의 들지 않는 색인화되지 않은 / 직렬화 된 배열 일 수 있습니다.

0

개발 서버를위한 빠른 솔루션이 필요한 모든 사람들을 위해 (2016 년 2 월 작성 시점) :

  1. 개발 서버를 중지하십시오.
  2. 대상 디렉토리를 삭제하십시오 .
  3. 프로젝트를 다시 빌드하십시오.

이렇게하면 데이터 스토어에서 모든 데이터가 지워집니다.


0

라이브 데이터 저장소의 모든 데이터삭제 하는 기존 솔루션에 너무 실망해서 30 초 내에 상당량의 데이터를 삭제할 수있는 작은 GAE 앱을 만들었습니다.

기타 설치 방법 : https://github.com/xamde/xydra


0

자바의 경우

DatastoreService db = DatastoreServiceFactory.getDatastoreService();
List<Key> keys = new ArrayList<Key>();
for(Entity e : db.prepare(new Query().setKeysOnly()).asIterable())
    keys.add(e.getKey());
db.delete(keys);

개발 서버에서 잘 작동합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.