2011-12-03 25 views
0

我有以下模型類。確保字段唯一約束的方法

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='[email protected]', email='[email protected]', checksum=456, version=1281, content=blob_key) 

我不知道這是一個好辦法嗎?或者,還有其他更好的方法嗎?

回答

3

這真的是唯一的方法。

在這種情況下,email屬性可能是多餘的,因爲您已經將數據存儲在密鑰名稱中。

唯一的另一種選擇是爲所有人類實體提供相同的父項,從而將它們放在一個實體組中,這將允許您在事務內執行更新以檢查具有相同電子郵件的現有實體。但是,這會阻止您每秒對所有人體實體(以及他們的任何子女)進行超過1次的更改,這對於小型低流量站點聽起來並不壞,但會導致可伸縮性喪失。