金鑰類別

附註:我們強烈建議建構新應用程式的開發人員使用 NDB 用戶端程式庫,因為 NDB 用戶端程式庫與本用戶端程式庫相較之下有幾個優點,例如能透過 Memcache API 自動將實體加入快取。如果您目前使用的是舊版的 DB 用戶端程式庫,請參閱從 DB 至 NDB 的遷移指南

Key 類別的執行個體代表的是資料儲存庫實體的唯一金鑰。

Keygoogle.appengine.ext.db 模組提供。

簡介

每個模型執行個體都有識別用的「金鑰,其中包含執行個體的「實體種類,以及不重複的唯一「ID」。ID 可能為「金鑰名稱」的字串,由應用程式在執行個體建立時明確指派,或是整數的「數字 ID」,由 App Engine 在執行個體寫入 (put) 至資料儲存庫時自動指派。模型執行個體的 key() 方法會傳回執行個體的 Key 物件。如果執行個體未有指派金鑰,key() 會發出 NotSavedError

應用程式可使用 get() 函式擷取指定 Key 的模型執行個體。

Key 執行個體可能為資料儲存庫實體屬性值,包括 Expando 動態屬性以及 ListProperty 成員。ReferenceProperty 模型提供 Key 屬性值的功能,例如自動取消參照。

建構函式

class Key(encoded=None)

資料儲存庫物件的唯一金鑰。

將 Key 物件傳遞至 str(),即可將金鑰轉換為字串。這個字串是「網址安全」字串,只會使用適用於網址的字元。只要將金鑰的字串表示法傳遞至 Key 建構函式 (encoded 引數),即可轉換回 Key 物件。

注意:代表金鑰的字串看似為隱密內容,但實際上未經加密!它可轉換回原始的金鑰資料,包含種類與 ID。如果您不想向使用者公開這項資料 (並允許他們輕易猜出其他實體的金鑰),請加密這些字串或使用其他項目。

編碼
:要轉換回 Key 的 Key 例項的 str 表單。

類別方法

Key 類別提供的類別方法如下:

Key.from_path(*path, parent=None, namespace=None)

這會透過 (選用的) 祖系路徑 (位於現有的 Key 物件) 以及一或多個新路徑元件,建構出新的 Key 物件。每個路徑元件都包含種類名稱 (kind) 和 ID (id_or_name),ID 可以是數字或字串。

路徑代表實體的父項與子項之間的關係階層。路徑中的所有實體都能夠以實體種類加上其數字 ID 或其金鑰名稱來表示。完整路徑代表出現在路徑最後的實體,而且其祖系 (父項) 為之前的實體。

舉例來說,下列呼叫會在父項鍵 User/Boris 下方,為種類為 Address 的實體建立數字 ID 為 9876 的鍵:

k = Key.from_path('User', 'Boris', 'Address', 9876)

另一個建立相同金鑰的方法如下:

p1 = Key.from_path('User', 'Boris')
k = Key.from_path('Address', 9876, parent=p1)

如要進一步瞭解路徑的相關資訊,請參閱實體、屬性和金鑰頁面。

引數

路徑
一或多個祖先路徑元件的清單,每個元件都包含「種類」和「ID」
  • 種類 — 實體種類,以字串或 Unicode 字串表示。
  • IDid,以字串或長整數指定。不可為數字 0。
namespace=None
僅限為這個鍵設定的命名空間。如果您在此提供命名空間,系統會覆寫 namespace_manager 中目前設定的命名空間。如果為 None,API 會透過 namespace_manager.get_namespace 使用目前的命名空間。
parent=None
選用父項鍵。如未提供,預設為 None

實例方法

Key 執行個體的方法如下:

app()

傳回儲存資料實體的應用程式名稱。

has_id_or_name()

如果實體有名稱或數字 ID,則傳回 True

id()

以整數形式傳回資料實體的數字 ID,如果實體沒有數字 ID,則傳回 None

id_or_name()

傳回資料實體的名稱或數字 ID (以現有者為準),如果實體沒有名稱和數字 ID,則傳回 None

kind()

以字串形式傳回資料實體的種類。

name()

傳回資料實體的名稱;如果實體沒有名稱,則傳回 None

namespace()

傳回資料實體的命名空間。如果實體目前沒有命名空間,則此方法會傳回目前在 namespace_manager 中設定的命名空間。

parent()

傳回資料實體的父系實體金鑰;如果實體沒有父項,則傳回 None