Membuat, Mengambil, Memperbarui, dan Menghapus Entity

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:

sandy = Account(
    username='Sandy', userid=123, email='sandy@example.com')

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:

sandy_key = sandy.put()

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:
    sandy = Account(
        username='Sandy', userid=123, email='sandy@example.com')
  • Tetapkan properti secara manual setelah pembuatan entity:
    sandy = Account()
    sandy.username = 'Sandy'
    sandy.userid = 123
    sandy.email = 'sandy@example.com'
  • Gunakan metode praktis populate() untuk menetapkan beberapa properti dalam satu operasi:
    sandy = Account()
    sandy.populate(
        username='Sandy',
        userid=123,
        email='sandy@gmail.com')

Namun, Anda memilih untuk menetapkan properti entity, jenis properti (dalam hal ini, StringProperty dan IntegerProperty) menerapkan pemeriksaan jenis.

Contoh:

bad = Account(
    username='Sandy', userid='not integer')  # raises an exception
...
sandy.username = 42  # raises an exception

Mengambil Entity dari Kunci

Jika memiliki kunci entity, Anda dapat mengambil entity tersebut dari Datastore:

sandy = sandy_key.get()

Metode Kunci kind() dan id() memulihkan jenis dan ID entity dari kunci:

kind_string = sandy_key.kind()  # returns 'Account'
ident = sandy_key.id()  # returns '2'

Anda juga dapat menggunakan kunci entity untuk mendapatkan string berenkode yang cocok untuk disematkan dalam URL:

url_string = sandy_key.urlsafe()

Tindakan ini memberikan hasil seperti agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM yang nantinya dapat digunakan untuk merekonstruksi kunci dan mengambil entity asli:

sandy_key = ndb.Key(urlsafe=url_string)
sandy = sandy_key.get()

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:

sandy = key.get()
sandy.email = 'sandy@example.co.uk'
sandy.put()

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:

sandy.key.delete()

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:

list_of_keys = ndb.put_multi(list_of_entities)
list_of_entities = ndb.get_multi(list_of_keys)
ndb.delete_multi(list_of_keys)

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.)