Google App Engine: get_or_create ()? - PullRequest
6 голосов
/ 05 июня 2010

Есть ли в Google App Engine эквивалент * Django get_or_create () ?

Ответы [ 2 ]

8 голосов
/ 05 июня 2010

Полного эквивалента нет, но get_or_insert - нечто похожее. Основное отличие состоит в том, что get_or_insert принимает key_name в качестве поиска к фильтрам, установленным в get_or_create.

2 голосов
/ 05 июня 2010

Не проверял это, но должно быть что-то вроде следующего:

class BaseModel(db.Model):
  @classmethod
  def get_or_create(cls, parent=None, **kwargs):
    def txn():
      query = cls.all()
      if parent:
        query.ancestor(parent)
      for kw in kwargs:
        query.filter("%s =" % kw, kwargs[kw])
      entity = query.get()
      if entity:
        created = False
      else:
        entity = cls(parent, **kwargs)
        entity.put()
        created = True
      return (entity, created)
    return db.run_in_transaction(txn)

class Person(BaseModel):
  first_name = db.StringProperty()
  last_name = db.StringProperty()

p, created = Person.get_or_create(first_name='Tom', last_name='Smith')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...