Добавление Google App Engine Python - PullRequest
1 голос
/ 06 января 2011
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

Ответы [ 4 ]

3 голосов
/ 06 января 2011

Нужные вам изменения - это не просто настройка одной строки.

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

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

1 голос
/ 06 января 2011

Это не имеет ничего общего с 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: Naming Convention».Вообще говоря, в классах Python следует использовать CapWords, в то время как функции и переменные должны использовать lowercase_with_underscores.

0 голосов
/ 07 января 2011

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

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

0 голосов
/ 06 января 2011

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

t = int(Last) +1

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

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