Datastore 中的資料物件又稱為「實體」。為方便查詢,每個實體會分門別類到特定的「種類」中。舉例來說,人力資源應用程式可以用 Employee
種類的實體來代表每位員工。請注意,實體資料值採屬性形式。如要進一步瞭解實體,請參閱祖系路徑和交易的說明文件。
建立實體及設定屬性
您可以透過呼叫實體模型類別的建構函式方法來建立及設定實體。如要進一步瞭解如何建立實體模型類別,請參閱建立及使用實體模型類別。
以下範例說明如何使用關鍵字引數叫用模型類別的建構函式:
此程式碼會在程式的主記憶體中建立一個物件。不過請注意,實體會在程序結束時消失,因此您還必須呼叫 put()
,將實體儲存在 Datastore 中,如下所示:
請注意,這會傳回一個金鑰,您稍後可以使用這個金鑰從 Datastore 擷取實體。
使用下列選項來設定屬性:
- 使用關鍵字引數將實體屬性指定至建構函式:
- 在實體建立後手動設定屬性:
- 使用
populate()
便利方法在一次操作中設定多個屬性:
無論您選擇如何設定實體的屬性,屬性類型 (在本例中為 StringProperty
和 IntegerProperty
) 都會強制執行類型檢查。
例如:
...
從金鑰擷取實體
如果您有實體的索引鍵,就可以從 Datastore 擷取該實體:
索引鍵方法 kind()
和 id()
會從索引鍵復原實體的種類和 ID:
您還可以使用實體金鑰來取得適合嵌入網址的編碼字串:
這會產生 agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM
等結果,日後可用於重建金鑰並擷取原始實體:
請注意,安全網址字串雖然看似為隱密內容,但實際上未經加密!它很容易被解碼,並還原原始的實體種類和 ID:
key = Key(urlsafe=url_string) kind_string = key.kind() ident = key.id()
您可以使用這類安全網址金鑰,但請勿使用任何機密資料 (例如電子郵件地址) 作為實體 ID。可能的解決方案是使用機密資料的雜湊做為 ID。這樣一來,可查看加密金鑰的第三方就無法利用這些金鑰收集電子郵件地址,但這不會阻止他們自行產生已知電子郵件地址的雜湊,並用於檢查該地址是否存在於 Datastore 中。
更新實體
如要更新現有實體,請從 Datastore 擷取實體、修改其屬性,然後再次儲存:
在這種情況下,您可以忽略 put()
傳回的值,因為實體鍵在更新時不會變更。
刪除實體
不再需要實體時,您可以使用鍵的 delete()
方法,將實體從 Datastore 中移除:
請注意,這是針對金鑰執行的作業,而非針對實體本身。它一律會傳回 None
。
刪除大量實體
如果需要刪除大量的實體,建議您使用 Dataflow 大量刪除實體。
使用批次作業
您可以用單次呼叫處理一系列的實體或金鑰,而不用逐一執行呼叫 (例如運用迴圈重複執行呼叫)。這將會產生批次作業的遠端程序呼叫 (RPC),而非個別實體的單獨遠端程序呼叫。
以下程式碼示範操作方式:
在上方的程式碼中,您將一個金鑰物件清單傳送至 ndb.get_multi
,以便擷取批次中的多個實體;ndb.get_multi
會傳回一個實體物件清單,而在 Datastore 中沒有對應實體的金鑰則會傳回 None
值。以這種方式取得實體,可減少對整個批次的 Datastore 呼叫次數。(每批次的呼叫次數取決於批次的大小設定)。