2010-06-05 21 views

उत्तर

8

कोई पूर्ण समकक्ष नहीं है, लेकिन get_or_insert कुछ समान है। मुख्य अंतर यह है कि get_or_insertkey_name को get_or_create में सेट फ़िल्टर के विरुद्ध लुकअप के रूप में स्वीकार करता है।

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