然而,现在我想知道如果为我的模型创建和使用密钥是要走的路,我的iPhone应用程序人员告诉我,我们需要INT存储在数据库中。我让我的Python代码使用Keys,现在可能不得不回溯。
我希望听到您对整个创建关键名称与自动生成ID的意见,我的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)
我是如何使用Keys处理它们的(下面)。 每次用户登录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 :(得分:1)
您可能希望避免仅使用“id”作为字段名称。编码时可能会与数据键的id()混淆。 http://code.google.com/appengine/docs/python/datastore/keyclass.html
user_id是不错的选择。
想要使用整数的“iPhone家伙”非常关注。你真的不想依赖或使用顺序int值的id。除了在集群环境中变得棘手之外,它还会引入安全性问题,其中ID很容易猜到。
答案 1 :(得分:0)
使用键名的方式看起来很好。您的iPhone开发人员是否有一个具体原因,他不希望您使用它们?