确保场的唯一约束的方法

时间:2011-12-03 14:14:06

标签: python google-app-engine

我有以下模特类。

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)

我不确定这是一个好方法吗?或者,还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:3)

这实际上是唯一的方法。

在这种情况下,email属性可能是多余的,因为您已经将数据存储在密钥名称中。

唯一的另一个选择是为所有Human实体提供相同的父实体,从而将它们放在一个实体组中,这样您就可以在事务中进行更新,以检查具有相同电子邮件的现有实体。但是,这会阻止您每秒对所有人类实体(以及他们的任何子实体)进行超过1次更改,这对于小型低流量站点来说听起来并不坏,但会破坏可扩展性。