谷歌应用引擎:get_or_create()?

6 投票
2 回答
1172 浏览
提问于 2025-04-15 23:36

谷歌的应用引擎有没有类似于Django中 get_or_create() 这个功能的东西呢?

2 个回答

2

我还没测试过这个,但应该像下面这样:

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')
8

虽然没有完全相同的东西,但 get_or_insert 有点像。主要的区别在于,get_or_insert 可以使用 key_name 来查找,而 get_or_create 是根据设置的过滤条件来查找的。

撰写回答