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 denganqry.filter(filter1, filter2)
- get(**q_options)
- Menampilkan hasil kueri pertama, jika ada (jika tidak,
None
). Hal ini mirip dengan memanggilq.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 sepertiqry.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 sepertiqry.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.
(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. JikaFalse
, tidak ada hasil lagi; jikaTrue
, 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 menggunakancursor.urlsafe()
dan merekonstruksi kursor tersebut dalam permintaan berikutnya menggunakanCursor(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. Jikapass_batch_into_callback=True
diberikan, callback akan dipanggil dengan tiga argumen: batch saat ini, indeks dalam batch, dan entity atauKey
pada indeks tersebut. Callback dapat menampilkan apa pun yang diinginkannya. Jika callback-nya adalahNone
, 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 keseluruhanmap()
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 untuktasklets.MultiFuture
jika ingin mengetahui implementasi default dan deskripsi protokol yang harus diimplementasikan objekmerge_future
. Alternatif dari modul yang sama mencakupQueueFuture
,SerialQueueFuture
, danReducingFuture
.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().