我正在尝试使用谷歌应用引擎和python ndb构建一个提醒应用。现在我有两个实体User和Reminder。什么是更好的设计:
OR
如果我选择第一个,那么每个提醒就会增加一个整数id,考虑到它可能会非常高吗?或者还有其他更好的方法来做到这一点。
答案 0 :(得分:0)
Google App Engine(GAE)NDB模型密钥ID号码不会自动递增,因此我不确定这是一个相关问题。
GAE NDB模型使用密钥,可以将密钥存储为其他模型实例中的密钥属性列表。密钥存储id,可用于稍后检索提醒。
# Create an instance of a model
instance = SomeModel()
instance.put()
# Retrieve ID
instance.key.id()
例如,您可以使用提醒和用户模型,但将提醒密钥作为用户的属性:
from google.appengine.ext import ndb
class Reminder(ndb.Model):
remindTime = ndb.DateTimeProperty()
class User(ndb.Model):
reminderKeys = ndb.KeyProperty(kind=Reminder, repeated=True)
向用户添加新提醒时,您将执行以下操作:
from datetime import datetime, timedelta
# Set reminder times to future
reminder1 = Reminder(remindTime = datetime.now() + timedelta(minutes = 10))
reminder2 = Reminder(remindTime = datetime.now() + timedelta(minutes = 20))
# Send reminders to datastore to assure they have generated keys
reminder1.put()
reminder2.put()
# Create user with reminder1
user = User(reminderKeys = [reminder1.key])
# Add reminder2 to user
user.reminderKeys.append(reminder2.key)
# Retrieve Reminders for user
for key in user.reminderKeys:
print Reminder.get_by_id(key.id())
这样,您可以为提醒创建其他属性,同时仍将它们绑定到用户模型。
您可以在此处详细了解GAE NDB属性和键的行为: https://developers.google.com/appengine/docs/python/ndb/properties