2011-01-27 40 views
3

Hiya,之前我問過一個關於使用完美回答的密鑰的問題。使用Python的Google App Engine上的密鑰或ID

但是,現在我想知道如果爲我的模型創建和使用密鑰是要走的路,我的iPhone應用程序人員告訴我們需要將INT存儲在數據庫中。我的Python代碼與Keys一起工作,現在可能不得不回溯。

我很希望聽到您對整個創建關鍵名稱的意見,以及我的iPhone應用程序可以使用的自動生成ID,而無需任何重大更改。

這裏是我的模型:

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」爲什麼他告訴你使用INTs。 – 2011-01-28 05:27:13

回答

0

使用鍵名的方式看起來不錯。你的iPhone開發者有一個具體的原因,爲什麼他不希望你使用它們?

1

您可能希望避免僅爲字段名稱使用「id」。編碼時可能與數據鍵的id()混淆。 http://code.google.com/appengine/docs/python/datastore/keyclass.html

user_id是不錯的選擇。

想要使用整數的「iPhone人」非常關注。你真的不想依賴或使用順序int值ids。除了在集羣環境中獲得正確的技巧之外,它還可能引入安全問題,其中id很容易被猜出。

相關問題