В Python-версии Google App Engine, как вы можете переопределить класс db.Model для сохранения во временном хранилище данных, а не в большой таблице? - PullRequest
1 голос
/ 10 июля 2010

В Сингапуре мы обучаем студентов питону с использованием Singpath ( singpath.appspot.com ).В дополнение к тому, что студенты могут практиковаться в написании программного обеспечения на python, мы хотели бы познакомить студентов с google.appengine.ext.db API, который используется для доступа к большой таблице.

Какой самый простой способ изменить настройки db.Model в приложении App Engine, чтобы любой пользователь помещал или получал доступ к локальному временному хранилищу данных вместо записи в большую таблицу?Я пытаюсь сделать что-то похожее на то, как gaeunit создает новое временное хранилище данных при каждом запуске модульных тестов.

from google.appengine.ext import db
import logging

class MyModel(db.Model):
  name = db.StringProperty()

#Configure a temp datastore to be updated instead of bigtable. 

m = MyModel()
m.put() #shouldn't update bigtable
result = MyModel.all() #should fetch from temp datastore

logging.info("There were %s models saved", result.count())

1 Ответ

2 голосов
/ 11 июля 2010

Конечно, вы можете сделать это на сервере разработки, создав новое хранилище данных заглушки, когда захотите, например, gaeunit.Я не думаю, что концепция действительно переносится в производственную среду.Временное хранилище данных должно иметь какое-то резервное хранилище, реальное хранилище данных или memcache.AFAIK: встроенной поддержки для обоих нет.

Альтернативой может быть использование реального хранилища данных с некоторой изолированной программной средой.

Вы можете переопределить db.Model.kind для префикса ID сессии:

@classmethod
def kind(cls):
  return "%s_%s" % (SESSION_ID, cls.__name__)

Это даст вам базовое пространство имен для созданных пользователем сущностей.

Если у вас есть сущность сеанса, вы можете заполнить ее как родительскую сущность в любом запросе, который еще не определил один,Это приведет к тому, что все сущности вашего пользователя будут объединены в одну группу сущностей.

В любом случае в начале сеанса вы можете запланировать запуск задачи на более поздний срок, которая очистит сущности, созданные пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...