Objek data di Datastore dikenal sebagai entity, yang masing-masing dikategorikan berdasarkan jenis tertentu untuk tujuan kueri. Misalnya, jika Anda menulis aplikasi sumber daya manusia, Anda dapat mewakili setiap karyawan dengan entity jenis Employee
. Perhatikan bahwa nilai data
entity tersedia dalam bentuk
properti.
Untuk mengetahui informasi selengkapnya tentang entity, lihat dokumentasi tentang
jalur ancestor dan transaksi.
Membuat entity dan menyetel properti
Anda membuat entity dan menetapkan dengan memanggil metode konstruktor untuk class modelnya. Lihat Membuat dan Menggunakan Class Model Entity untuk informasi tentang cara membuat class model entity.
Contoh berikut menunjukkan cara memanggil konstruktor class model dengan argumen kata kunci:
Kode ini membuat sebuah objek dalam memori utama program Anda. Namun, perlu diperhatikan bahwa entity akan menghilang saat proses berakhir, sehingga Anda juga harus mempertahankan entity ke Datastore, dengan memanggil put()
, seperti berikut:
Perhatikan bahwa tindakan ini menampilkan kunci yang dapat Anda gunakan untuk mengambil entity dari Datastore di lain waktu.
Tetapkan properti menggunakan salah satu opsi berikut:
- Tetapkan properti entity untuk konstruktor dengan argumen kata kunci:
- Tetapkan properti secara manual setelah pembuatan entity:
- Gunakan metode praktis
populate()
untuk menetapkan beberapa properti dalam satu operasi:
Namun, Anda memilih untuk menetapkan properti entity, jenis properti (dalam hal ini,
StringProperty
dan IntegerProperty
) menerapkan pemeriksaan jenis.
Contoh:
...
Mengambil Entity dari Kunci
Jika memiliki kunci entity, Anda dapat mengambil entity tersebut dari Datastore:
Metode Kunci kind()
dan id()
memulihkan jenis dan ID entity
dari kunci:
Anda juga dapat menggunakan kunci entity untuk mendapatkan string berenkode yang cocok untuk disematkan dalam URL:
Tindakan ini memberikan hasil seperti agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM
yang nantinya dapat
digunakan untuk merekonstruksi kunci dan mengambil entity asli:
Perhatikan bahwa string aman URL tampak samar, tetapi tidak dienkripsi. Data ini dapat dengan mudah didekode untuk memulihkan jenis dan ID entity asli:
key = Key(urlsafe=url_string) kind_string = key.kind() ident = key.id()
Jika Anda menggunakan kunci aman URL tersebut, jangan gunakan data sensitif seperti alamat email sebagai ID entity. Solusi yang memungkinkan adalah menggunakan hash data sensitif sebagai ID. Tindakan ini akan menghentikan pihak ketiga, yang dapat melihat kunci terenkripsi, agar tidak menggunakannya untuk mengambil alamat email, meskipun hal ini tidak menghentikan mereka untuk secara independen membuat hash mereka sendiri untuk alamat email yang diketahui dan menggunakannya untuk memeriksa apakah alamat itu ada di Datastore.
Mengupdate entity
Untuk mengupdate entity yang ada, ambil dari Datastore, ubah propertinya, dan simpan kembali:
Dalam kasus ini, Anda dapat mengabaikan nilai yang ditampilkan oleh put()
, karena kunci entity
tidak berubah saat Anda mengupdatenya.
Menghapus entity
Jika entity tidak lagi diperlukan, Anda dapat menghapusnya dari
Datastore dengan metode delete()
kunci:
Perhatikan bahwa ini adalah operasi pada kunci, bukan pada entity itu sendiri. Tindakan ini selalu
menampilkan None
.
Menghapus entity secara massal
Jika Anda perlu menghapus entity dalam jumlah besar, sebaiknya gunakan Dataflow untuk menghapus entity secara massal.
Menggunakan operasi batch
Anda dapat memproses kumpulan entity atau kunci dalam satu panggilan, bukan secara terpisah dalam panggilan terpisah, misalnya di dalam loop. Hal ini menghasilkan satu remote procedure call (RPC) untuk batch, bukan panggilan RPC yang terpisah untuk setiap entity.
Kode berikut menunjukkan cara melakukannya:
Pada kode di atas, Anda meneruskan daftar objek utama ke ndb.get_multi
untuk mengambil
beberapa entity dalam satu batch; ndb.get_multi
menampilkan daftar objek entity, dengan nilai None
untuk kunci yang tidak memiliki entity yang sesuai di Datastore. Mendapatkan entity dengan cara ini akan menghasilkan lebih sedikit panggilan ke Datastore untuk seluruh batch. (Jumlah panggilan per batch bergantung pada setelan ukuran batch Anda.)