附註:我們強烈建議建構新應用程式的開發人員使用 NDB 用戶端程式庫,因為 NDB 用戶端程式庫與本用戶端程式庫相較之下有幾個優點,例如能透過 Memcache API 自動將實體加入快取。如果您目前使用的是舊版的 DB 用戶端程式庫,請參閱從 DB 至 NDB 的遷移指南。
Key 類別的執行個體代表的是資料儲存庫實體的唯一金鑰。
Key 由 google.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 字串表示。
- ID:
id,以字串或長整數指定。不可為數字 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。