嗨,我之前问过一个关于使用 key 的问题,得到了完美的回答。
但是,现在我想知道是否可以为我的模型创建和使用 key ,我的 iPhone 应用程序人员告诉我我们需要 INT 来存储在数据库中。我的 Python 代码与 Keys 一起工作,现在可能不得不回溯。
我很想听听您对创建 key 名称与自动生成 ID 的整体意见,我的 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)
以及我如何使用 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()
最佳答案
您可能希望避免仅使用“id”作为字段名称。编码时可能会与数据键的 id() 混淆。 http://code.google.com/appengine/docs/python/datastore/keyclass.html
user_id 是不错的选择。
您的“iPhone 用户”想要使用整数非常令人担忧。您真的不想依赖或使用 id 的顺序 int 值。除了在集群环境中难以获得正确性之外,它还会引入安全问题,使 ID 变得容易被猜到。
关于python - 使用 Python 的 Google App Engine 上的 key 或 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4823256/