2011-01-27 2 views
3

안녕하세요, 저는 완벽하게 답변 된 키 사용과 관련하여 이전에 질문했습니다.Google App Engine (Python)의 키 또는 ID

그러나 지금은 내 모델에 대한 키를 만들고 사용하는 것이 길 일지 궁금해졌습니다. 내 iPhone App 녀석이 데이터베이스에 저장하기 위해 INT가 필요하다는 말을 들었습니다. Keys에서 작업하는 Python 코드를 얻었으므로 이제 추적해야 할 수도 있습니다.

내 iPhone 앱이 큰 변경없이 사용할 수있는 자동 생성 키 이름과 전체 키 생성에 대한 의견을 듣고 싶습니다.

class User(db.Model): 
    id = db.StringProperty() 
    name = db.StringProperty() 
    image = db.BlobProperty(default=None) 

class Book(db.Model): 
    image = db.BlobProperty() 
    date_added = db.DateTimeProperty(auto_now_add=True) 
    is_active = db.BooleanProperty(default=True) 

class BookUser(db.Model): 
    book = db.ReferenceProperty(Book) 
    user = db.ReferenceProperty(User) 
    is_active = db.BooleanProperty(default=True) 

을 그리고 난 키 (아래)를 사용하여 처리 된 방법 :

여기 내 모델입니다. 사용자가 로그인 할 때마다 BookUser 레코드가 아직없는 경우 만들어집니다. 이 모든 데이터를 iPhone에 보내야합니다. ID를 데이터베이스에 저장해야합니다. 아래 내용은 iPhone 개발자에게 "빨라라"고 말해야한다고 생각하는 꽤 견고한 핸드폰입니다.

아니면 아래의 방법으로 해결할 수 있습니까?

### Get the Users Details 
user_id = 1 
user = User.get_by_key_name(user_id) 
user_key = user.key().name() 

### Get the latest active Book 
book = Book.all().filter('is_active =', True).get() 
book_key = book.key().name() 

### Get latest Book for this User 
bookuser_key_name = "%s:%s" % (str(book_key), str(user_key)) 
bookuser = BookUser.get_or_insert(bookuser_key_name) 
bookuser.card = card 
bookuser.user = user 
bookuser.put() 
+0

먼저 "iPhone App Guy"에게 INT를 사용하라고 말한 이유를 묻습니다. –

+0

용어에 대한 참고 사항 : 모든 엔터티에는 키가 있습니다. id 또는 key_name은 키의 일부입니다. – geoffspear

답변

0

잘 보이는대로 키 이름을 사용하십시오. 귀하의 iPhone 개발자가 귀하가 그 (것)들을 사용하기를 원하지 않는 구체적인 이유가 있습니까?

1

필드 이름에 "id"만 사용하는 것은 피해야합니다. 코딩 할 때 데이터 키의 id()와 혼동 될 수 있습니다. http://code.google.com/appengine/docs/python/datastore/keyclass.html

user_id는 좋은 선택입니다.

int를 사용하고자하는 "iPhone guy"이 매우 중요합니다. ID에 순차적 인 int 값을 사용하거나 사용하고 싶지는 않습니다. 클러스터 된 환경에서 올바르다는 것이 까다로울뿐 아니라 ID를 쉽게 추측 할 수있는 보안 문제가 발생할 수 있습니다.