Хорошо, если ты не знаешь. Но вы уволены, если не можете даже погуглить.
Интернет - это инструмент. Это не делает тебя глупее, если ты учишься у него.
Если вы говорите о живое хранилище данных , откройте панель управления вашего приложения (войдите в appengine), затем хранилище данных -> просмотрщик данных, выберите все строки таблицы, которую вы хотите удалить, и нажмите кнопку удаления (вам придется сделайте это для всех ваших таблиц). Вы можете сделать то же самое программно через remote_api (но я никогда не использовал его).
Если вы говорите о хранилище данных разработки , вам просто нужно удалить следующий файл: "./WEB-INF/appengine-generated/local_db.bin". Этот файл будет сгенерирован для вас снова, когда вы в следующий раз запустите сервер разработки, и у вас будет чистая база данных.
Обязательно очистите свой проект после этого.
Это одна из маленьких ошибок, которые могут пригодиться вы начинаете играть с Google Application Engine. Вы обнаружите, что сохраняете объекты в хранилище данных, а затем изменяете объектную модель JDO для своих устойчивых сущностей, в результате чего получаются устаревшие данные, что приведет к сбою вашего приложения повсюду.
Вы можете сделать это через веб-интерфейс. Войдите в свою учетную запись, переходите по ссылкам слева. В управлении хранилищем данных вы можете изменять и удалять данные. Используйте соответствующие параметры.
Если у вас есть значительный объем данных, вам нужно использовать сценарий для его удаления. Однако вы можете использовать remote_api, чтобы очистить хранилище данных со стороны клиента простым способом.
Лучшим подходом является метод удаленного API, предложенный Ником, он Разработчик App Engine из Google , так что доверяйте ему.
Это не так уж и сложно, и последняя версия 1.2.5 SDK предоставляет remote_shell_api.py прямо с полки. Итак, скачивайте новый SDK. Затем выполните следующие действия:
подключите удаленный сервер в командной строке: remote_shell_api.py yourapp / remote_api
Оболочка запросит данные для входа и, если авторизована, создаст для вас оболочку Python. Вам нужно настроить обработчик URL-адресов для / remote_api в вашем приложении. Yaml
выберите объекты, которые вы хотите удалить, код выглядит примерно так:
from models import Entry query = Entry.all (keys_only = True) записи = query.fetch (1000) db.delete (записи) \ # Это может массово удалить 1000 объектов за раз
Обновление 2013-10-28 :
remote_shell_api.py
был заменен на remote_api_shell.py
, и вам следует подключиться с помощью remote_api_shell.py -s your_app_id .appspot.com
, согласно документации .
Есть новая экспериментальная функция Datastore Admin , после включения ее в настройках приложения вы также можете массово удалить в качестве резервного копирования хранилища данных через веб-интерфейс.
Я получил это из http://code.google.com/appengine/articles/remote_api.html .
Во-первых, вам необходимо определить интерактивную консоль приложения. Итак, создайте файл с именем 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 ()
Вот и все!
Если у вас много данных, использование веб-интерфейса может занять много времени. Утилита App Engine Launcher позволяет удалить все за один раз с помощью флажка «Очистить хранилище данных при запуске». Эта утилита теперь доступна как для Windows, так и для Mac (платформа Python).
Я создал панель дополнений, которую можно использовать с вашими развернутыми приложениями App Engine. В ней в выпадающем списке перечислены виды, которые присутствуют в хранилище данных, и вы можете нажать кнопку, чтобы запланировать "задания", которые удаляют все сущности определенного вида или просто все. Вы можете скачать его здесь:
http://code.google.com/p/jobfeed/wiki/Nuke