Class Kueri NDB

Objek Query mewakili kueri NDB, yaitu permintaan untuk daftar entity yang difilter dan diurutkan.

Halaman ini berisi dokumentasi referensi. Untuk pembahasan umum tentang kueri NDB, lihat Kueri.

Opsi Kueri

Banyak metode kueri menggunakan sekumpulan standar opsi tambahan, baik dalam bentuk argumen kata kunci seperti keys_only=True, maupun sebagai objek QueryOptions yang diteruskan dengan options=QueryOptions(...).

Kueri mendukung berbagai opsi konfigurasi. Properti ini ditentukan berdasarkan argumen kata kunci ke metode Query:

Argumen Jenis Default Deskripsi
keys_only bool False Semua operasi menampilkan kunci, bukan entity.
projection tuple (atau daftar) properti (atau string) None Operasi menampilkan entity yang hanya berisi set properti yang ditentukan. projection=[Article.title, Article.date] atau projection=['title', 'date'] mengambil entity dengan hanya dua kolom yang ditetapkan. (Lihat Kueri Proyeksi.)
offset int 0 Jumlah hasil kueri yang akan dilewati.
batas int Tak terbatas Jumlah hasil kueri maksimum yang akan ditampilkan.
batch_size int 20 Ukuran tumpukan.

Hanya memengaruhi efisiensi kueri; ukuran tumpukan yang lebih besar menggunakan lebih banyak memori tetapi membuat panggilan RPC lebih sedikit.
prefetch_size int None Mengganti ukuran tumpukan untuk batch pertama yang ditampilkan.
produce_cursors bool False Menghasilkan kursor dari kueri (lihat Iterator Kueri. Query Cursor).
start_cursor Cursor None Titik awal untuk penelusuran (lihat Query Cursor).
end_cursor Cursor None Titik akhir untuk penelusuran (lihat Query Cursor).
deadline int Bergantung pada Context Mengganti batas waktu RPC (yang defaultnya adalah 5 detik jika tidak diganti saat Context dibuat)
read_policy ndb.EVENTUAL_CONSISTENCY Kebijakan baca. Setel ke ndb.EVENTUAL_CONSISTENCY untuk mendapatkan hasil yang mungkin lebih cepat tanpa menunggu Datastore menerapkan perubahan dalam proses pada semua data yang ditampilkan.

Untuk menjalankan kueri dengan kumpulan opsi tertentu, teruskan argumen kata kunci ke metode yang berlaku:

qry = Employee.query().filter(...).order(...) # Create a query
for acct in qry.fetch(10, offset=20): # Skip the first 20
  print acct

Terkadang, Anda mungkin ingin menyimpan serangkaian opsi kueri dan menggunakannya di berbagai tempat. Meskipun Anda dapat menyimpannya dalam kamus dan meneruskan kamus ini ke metode menggunakan **kwds, Anda juga dapat membuat objek QueryOptions dan meneruskannya menggunakan opsi argumen kata kunci. Dua contoh berikut adalah contoh yang setara:

qo = ndb.QueryOptions(keys_only=True, offset=20)
results = qry.fetch(10, options=qo)
results = qry.fetch(10, keys_only=True, offset=20)

Konstruktor

Biasanya, aplikasi membuat Query dengan memanggil Model.query(). Namun, Anda juga dapat memanggil ndb.Query().

Argumen

kind
String jenis opsional. Biasanya, nama class entity.
ancestor
Kunci ancestor opsional.
filter
Node opsional yang mewakili hierarki ekspresi filter.
pesanan
Objek datastore_query.Order opsional.
app
ID aplikasi opsional.
namespace
Namespace opsional. Jika tidak ditentukan, namespace default pada saat kueri dieksekusi akan digunakan.
projection
Daftar atau tuple properti opsional yang akan di-project.
group_by
Daftar atau tuple properti opsional yang akan dikelompokkan.
default_options
Objek QueryOptions opsional yang memberikan opsi kueri default untuk digunakan saat kueri dieksekusi.

Metode Instance

filter(filter1, filter2, ...)
Menampilkan Query baru dengan filter tambahan. Mengambil argumen filter seperti yang dijelaskan dalam Kueri. qry.filter(filter1).filter(filter2) setara dengan qry.filter(filter1filter2)
get(**q_options)
Menampilkan hasil kueri pertama, jika ada (jika tidak, None). Hal ini mirip dengan memanggil q.fetch(1) dan menampilkan item pertama dari daftar hasil.

Argumen

**q_options
Semua argumen kata kunci opsi kueri didukung.
memesan(order1, order2, ...)
Menampilkan Query baru dengan tata urutan tambahan yang diterapkan. Dibutuhkan satu atau beberapa argumen yang merupakan properti atau properti yang "diabaikan". Misalnya, untuk mengurutkan pengguna menurut usia dan "putus hubungan" menurut nama, Anda dapat menggunakan sesuatu seperti qry.order(-Account.birthday, Account.name)
bind(...values...)
Fungsi ini digunakan untuk kueri GQL yang menggunakan binding parameter (:1, :2, dll.) atau binding bernama (:foo, :bar, dll.). Fungsi ini mengikat nilai yang diteruskan ke parameter.

Untuk mengikat parameter, Anda dapat memanggil sesuatu seperti qry.bind("USA", 49). Untuk mengikat parameter bernama, Anda dapat memanggil sesuatu seperti qry.bind(region = "USA", threshold = 49).

Menampilkan objek Query baru dengan nilai parameter yang terikat.

jumlah(batas=None, **q_options)
Menampilkan jumlah hasil kueri, hingga batas. Tindakan ini akan menampilkan hasil yang sama seperti len(q.fetch(limit)), tetapi lebih efisien.

Argumen

limit
Berapa banyak hasil yang akan dihitung paling banyak
**q_options
Semua argumen kata kunci opsi kueri dan opsi konteks didukung.
count_async(limit, **q_options)
Secara asinkron menghitung jumlah hasil kueri, hingga batas tertentu; fungsi ini menampilkan Future yang hasilnya berupa angka. Ini adalah versi asinkron dari count().
fetch(batas, **q_options)
Mengambil daftar hasil kueri, hingga batas tertentu.

Argumen

limit
Berapa banyak hasil yang akan dihitung paling banyak
**q_options
Semua argumen kata kunci opsi kueri didukung.
fetch_async(limit, **q_options)
Mengambil daftar hasil kueri secara asinkron, hingga batas tertentu. Menampilkan Future yang hasilnya adalah daftar hasil. Ini adalah versi asinkron dari fetch().
fetch_page(page_size, **q_options)
Mengambil "halaman" hasil. Metode ini adalah metode khusus untuk digunakan antarmuka pengguna paging.

Argumen

page_size
Maksimal jumlah hasil ini akan ditampilkan.
**q_options
Semua argumen kata kunci opsi kueri didukung.
Menampilkan tuple (results, cursor, more):
  • results daftar hasil kueri
  • cursor query cursor yang menunjuk ke batch hasil "berikutnya". Jika tidak ada hasil lagi, mungkin None.
  • more bool yang menunjukkan apakah akan ada (kemungkinan) lebih banyak hasil setelah batch ini. Jika False, tidak ada hasil lagi; jika True, mungkin ada hasil lainnya.

Untuk mengambil halaman berikutnya, teruskan kursor yang ditampilkan oleh satu panggilan ke panggilan berikutnya menggunakan start_cursor=cursor. Idiom yang umum adalah meneruskan kursor ke klien menggunakan cursor.urlsafe() dan merekonstruksi kursor tersebut dalam permintaan berikutnya menggunakan Cursor(urlsafe=string).

fetch_page_async(page_size, **q_options)
Mengambil "halaman" hasil secara asinkron. Ini adalah versi asinkron fetch_page().
get_async(**q_options)
Secara asinkron menampilkan hasil kueri pertama, jika ada (jika tidak, None). Ini adalah versi asinkron get().
iter(**q_options)
Membuat dan menampilkan iterator di atas kueri.

Argumen

**q_options
Semua argumen kata kunci opsi kueri didukung.

Menampilkan objek QueryIterator.

petakan(callback, pass_batch_into_callback=None, merge_future=None, **q_options)
Petakan fungsi callback atau tasklet dalam hasil kueri. Artinya, terapkan fungsi (atau tasklet) ke setiap entity dalam hasil kueri.

Argumen

callback
Fungsi atau tasklet yang akan diterapkan ke setiap hasil.
pass_batch_into_callback
Jika True, memanggil callback dengan argumen informasi batch seperti yang dijelaskan di bawah.
merge_future
Subclass Future opsional; lihat di bawah ini.
**q_options
Semua argumen kata kunci opsi kueri didukung.

Tanda tangan callback Callback biasanya dipanggil dengan entitas sebagai argumen. Namun, jika keys_only=True diberikan, akan dipanggil dengan Kunci. Jika pass_batch_into_callback=True diberikan, callback akan dipanggil dengan tiga argumen: batch saat ini, indeks dalam batch, dan entity atau Key pada indeks tersebut. Callback dapat menampilkan apa pun yang diinginkannya. Jika callback-nya adalah None, callback biasa akan diasumsikan bahwa hanya menampilkan entity atau kunci yang diteruskan.

Opsional merge_future merge_future adalah argumen lanjutan yang dapat digunakan untuk mengganti cara hasil callback digabungkan ke dalam keseluruhan map() nilai yang ditampilkan. Secara default, daftar nilai yang ditampilkan callback akan dibuat. Dengan mengganti salah satu dari sejumlah kecil alternatif khusus, Anda dapat mengatur sebaliknya. Lihat kode sumber untuk tasklets.MultiFuture jika ingin mengetahui implementasi default dan deskripsi protokol yang harus diimplementasikan objek merge_future. Alternatif dari modul yang sama mencakup QueueFuture, SerialQueueFuture, dan ReducingFuture.

Menampilkan daftar hasil semua callback. (Namun, lihat 'merge_future opsional' di atas.) Metode ini ditampilkan ketika kueri telah berjalan hingga selesai dan semua callback telah ditampilkan.

map_async(callback, pass_batch_into_callback=None, merge_future=None, **q_options)
Petakan fungsi callback atau tasklet secara asinkron pada hasil kueri. Ini adalah versi asinkron dari map().