谷歌应用引擎:get_or_create()?
谷歌的应用引擎有没有类似于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
是根据设置的过滤条件来查找的。