我有以下模特类。
class Human(db.Model):
email = db.StringProperty(required=True)
date = db.DateTimeProperty(auto_now=True)
checksum = db.IntegerProperty(required=True)
version = db.IntegerProperty(required=True)
content = blobstore.BlobReferenceProperty(required=True)
目前,为确保email
在数据库级别的唯一性,(确保整个数据库中没有重复的电子邮件)我使用以下方法。
h = human.Human(key_name='yccheok@yahoo.com', email='yccheok@yahoo.com', checksum=456, version=1281, content=blob_key)
我不确定这是一个好方法吗?或者,还有其他更好的方法吗?
答案 0 :(得分:3)
这实际上是唯一的方法。
在这种情况下,email
属性可能是多余的,因为您已经将数据存储在密钥名称中。
唯一的另一个选择是为所有Human实体提供相同的父实体,从而将它们放在一个实体组中,这样您就可以在事务中进行更新,以检查具有相同电子邮件的现有实体。但是,这会阻止您每秒对所有人类实体(以及他们的任何子实体)进行超过1次更改,这对于小型低流量站点来说听起来并不坏,但会破坏可扩展性。