Механизм Приложения Google: get_or_create ()?

Google App Engine имеет эквивалент get_or_create Django ()?

6
задан Nick Heiner 5 June 2010 в 18:58
поделиться

2 ответа

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

8
ответ дан 10 December 2019 в 00:34
поделиться

Не тестировал, но должно получиться примерно следующее:

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')
2
ответ дан 10 December 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: