2011-01-27 58 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很容易被猜出。