I am confused by get_or_insert(..). What should I pass as the key_name? Consider the following example:
class Person(db.model)
The possibly confusing thing here is that the key doesn't show up directly in your model declaration, so that name = db.StringProperty bit in your example isn't needed. get_or_insert takes the keyname as its first (required) argument, so you're looking for code like:
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")