Python 确保字段唯一约束的方法

Python 确保字段唯一约束的方法,python,google-app-engine,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.BlobRe

我有下面的模型课

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)
目前,为了确保
电子邮件
在数据库级别的唯一性,(确保整个数据库中没有重复的电子邮件),我使用以下方法

    h = human.Human(key_name='yccheok@yahoo.com', email='yccheok@yahoo.com', checksum=456, version=1281, content=blob_key)

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

这确实是唯一的方法

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


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

这确实是唯一的方法

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

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