Добавление Google App Engine Python

1
class Config(db.Model):

    Latest = db.IntegerProperty()

    class New(webapp.RequestHandler): 
        def get(self): 
            config = Config()
            Last = Config.Latest
            t = Last + 1

возвращает

t = LastUUID + ADDNUM
TypeError: unsupported operand type(s) for +: 'IntegerProperty' and 'Int'

Что я пытаюсь сделать, это получить int из хранилища данных и приложения 1. Затем переназначьте int в хранилище данных. Я не знаю, почему он бросает эти ошибки. Я даже попробовал t = int(Last +1). ОБНОВЛЕНИЕ: Это то, что мне нужно, и решить мою проблему. http://code.google.com/appengine/articles/sharding_counters.html

  • 0
    Попробовать long(Last + 1) ?
  • 2
    Целые числа автоматически переводятся в long в python. И это не имеет ничего общего с ошибкой.
Показать ещё 1 комментарий
Теги:
google-app-engine

4 ответа

3

Необходимые изменения - это больше, чем настройка одной строки.

Вам нужна какая-то функция инициализации, которая создаст экземпляр Config(), присвойте Latest начальное значение (например, 1 или 0) и сохраните его в хранилище данных.

Затем вашему RequestHandler необходимо выполнить запрос, чтобы получить соответствующий экземпляр Config. Наконец, обновите Latest и снова сохраните экземпляр в хранилище данных.

  • 1
    Это верно. Фактически, это единственный полный и правильный ответ, который был опубликован, поэтому я не уверен, почему за него проголосовали.
  • 0
    Потому что это совершенно неправильно. Вам не нужна функция инициализации, вам не нужно выполнять запрос или запрашивать объект из хранилища данных, и вам не нужно повторно сохранять экземпляр. Единственное, что вам нужно сделать, это настроить одну строку, и код работает как написано.
Показать ещё 3 комментария
1

Это не имеет ничего общего с Google App Engine или Django. В следующем коде:

class X(object):
    @property
    def y(self):
        return 5

x = X()
print X.y + 5

... вы получаете ту же ошибку. X.y относится к несвязаному свойству объекта класса. X.y относится к связанному свойству, и действительно в приведенном выше примере print x.y + 5 выводится "10".

Измените строку на Last = config.Latest, и она должна работать. И я настоятельно рекомендую вам принять рекомендации в PEP 8, в частности в разделе "Prescriptive: Соглашения об именах". Вообще говоря, в классах Python следует использовать CapWords, тогда как функции и переменные должны использовать lowercase_with_underscores.

0

http://code.google.com/appengine/articles/sharding_counters.html

Это базовый conter, который может обновляться несколько раз в секунду. Отлично работает

0

Синтаксис, который вы ищете, это

t = int(Last) +1

Однако я не уверен, что вы хотите сделать. Я не знаю джанго или что-то вроде этого, так трудно сказать. Но в python типы должны быть совместимы для вас, чтобы добавить их.

  • 0
    Это не относится к числам. 0.1 + 2 добавляет просто отлично.
  • 0
    Я сказал совместимый тип. float и int совместимы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню