Google App Engine – Datastore get_or_insert key_name confusion

Estoy confundido por get_or_insert(..) . ¿Qué debo pasar como el nombre key_name ? Considere el siguiente ejemplo:

 class Person(db.model) name = db.StringProperty(required=True) 

Supongamos que no hay dos personas que puedan tener el mismo nombre. Digamos que quiero obtener o insertar una nueva Person con nombre Peter , ¿cómo se vería mi statement get_or_insert ?

Aclamaciones,

Pete

Lo más confuso aquí es que la clave no aparece directamente en su statement de modelo, por lo que no se necesita name = db.StringProperty bit de name = db.StringProperty en su ejemplo. get_or_insert toma el nombre de get_or_insert como su primer argumento (requerido), por lo que está buscando un código como:

 person = Person.get_or_insert('Peter') # other interesting & useful code here... # later, maybe we need to retrieve that key name from the object: name = person.key().name() assert(name == "Peter") 

Puedes pensar en key_name como una clave principal. Mire los documentos de get_or_insert(...) , hay un ejemplo de cómo se ve el código de back-end.

Si el nombre es un campo único, es posible que desee utilizarlo también como nombre de clave. Aunque sugeriría eliminar espacios en blanco y normalizar el caso.