Setiap entity diidentifikasi oleh kunci yang unik dalam instance Datastore aplikasi, dan terdiri dari ID berikut:
- jenis. Jenis biasanya merupakan nama class model tempat entity berada, tetapi Anda dapat mengubahnya menjadi beberapa string lain dengan mengganti classmethod
_get_kind()
. - ID. Anda menentukan nama kunci Anda sendiri sebagai ID atau biarkan Datastore menghasilkan ID numerik bilangan bulat secara otomatis.
Menentukan nama kunci Anda sendiri
Contoh berikut secara implisit membuat kunci dengan ID string menggunakan parameter bernama id
:
Atau, Anda dapat menetapkan nama kunci secara langsung:
Mengizinkan Datastore membuat ID untuk digunakan sebagai kunci
Kode ini menunjukkan cara menggunakan ID yang dibuat secara otomatis sebagai kunci:
Menggunakan jalur ancestor dalam kunci
Urutan entity yang dimulai dengan root entity dan berlanjut dari induk ke turunan, yang mengarah ke entity tertentu, merupakan jalur ancestor entity tersebut. Secara rekursif, suatu entity, induknya, induk dari induknya, dan seterusnya merupakan ancestor entity. Entity dalam Datastore membentuk ruang kunci hierarkis yang mirip dengan struktur direktori hierarkis pada sistem file.
Kunci lengkap yang mengidentifikasi
entity terdiri dari urutan pasangan jenis-ID yang menentukan
jalur ancestor-nya dan berakhir dengan entity itu sendiri. Metode konstruktor untuk class Key
menerima urutan jenis dan
ID tersebut, serta menampilkan objek yang mewakili kunci untuk entity yang sesuai.
Contoh berikut menunjukkan layanan blogging yang menyimpan pesan berdasarkan revisi. Pesan diatur dalam akun, dan revisi diatur dalam pesan.
...
Dalam contoh, ('Account', 'sandy@example.com')
, ('Message', 123)
, dan ('Revision', '1')
adalah contoh pasangan jenis-ID.
Perhatikan bahwa Message
bukan class model dan hanya digunakan sebagai cara untuk
mengelompokkan revisi, bukan untuk menyimpan data.
Seperti yang ditunjukkan dalam kode contoh, jenis entity ditentukan oleh pasangan nama-jenis terakhir
dalam daftar: ndb.Key('Revision', '1')
.
Menggunakan parameter bernama
Anda dapat menggunakan parameter bernama parent
untuk menentukan entity apa pun di jalur ancestor secara langsung. Semua notasi berikut mewakili kunci yang sama:
Menentukan root entity
Untuk root entity, jalur ancestor kosong dan kuncinya hanya terdiri dari jenis dan ID entity itu sendiri.
Menentukan entity dengan ancestor
Untuk menyisipkan pesan baru dengan kunci induk
Untuk kunci yang dibuat dengan suatu induk, metode parent()
akan menampilkan kunci
yang mewakili parent entity:
Menggunakan ID Kunci Numerik
Anda dapat membuat entity tanpa menentukan ID, dalam hal ini penyimpanan data akan otomatis menghasilkan ID numerik. Jika Anda memilih untuk menentukan beberapa ID lalu mengizinkan Datastore membuat beberapa ID secara otomatis, Anda dapat melanggar persyaratan untuk kunci unik. Untuk menghindari hal ini, cadangkan rentang angka yang akan digunakan untuk memilih ID atau gunakan ID string untuk menghindari masalah ini sepenuhnya.
Untuk mencadangkan rentang ID, gunakan metode class allocate_ids()
:
- untuk mengalokasikan ID dalam jumlah tertentu
- untuk mengalokasikan semua ID hingga nilai maksimum yang ditentukan.
Mengalokasikan ID
Untuk mengalokasikan 100 ID ke class model MyModel
tertentu:
Untuk mengalokasikan 100 ID ke entity dengan kunci induk p
:
Nilai yang ditampilkan, first
dan last
, adalah ID pertama dan terakhir (inklusif)
yang dialokasikan. Anda dapat menggunakan ini untuk membuat kunci seperti berikut:
Kunci ini dijamin tidak akan ditampilkan sebelumnya oleh generator ID internal penyimpanan data, dan tidak akan ditampilkan oleh panggilan mendatang ke generator ID internal. Namun, metode allocate_ids()
tidak memeriksa
apakah ID yang ditampilkan ada di penyimpanan data; metode ini hanya berinteraksi
dengan generator ID.
Untuk mengalokasikan semua ID hingga nilai maksimum yang ditentukan:
Formulir ini memastikan bahwa semua ID yang kurang dari atau sama dengan N
dianggap
telah dialokasikan. Nilai yang ditampilkan, first
dan last
, menunjukkan rentang ID yang dicadangkan oleh operasi ini. Mencoba mencadangkan ID yang sudah dialokasikan bukanlah suatu kesalahan; jika terjadi, first
menunjukkan ID pertama yang belum dialokasikan dan
last
adalah ID terakhir yang dialokasikan.