Catatan: Developer yang membuat aplikasi baru sangat dianjurkan untuk menggunakan Library Klien NDB, yang memiliki beberapa manfaat dibandingkan dengan library klien ini, seperti menyimpan entity dalam cache secara otomatis melalui Memcache API. Jika saat ini Anda menggunakan Library Klien DB versi lama, baca Panduan Migrasi DB ke NDB
Fungsi yang dijelaskan di halaman ini ditentukan dalam paket google.appengine.ext.db
.
Functions
- allocate_ids (model, count)
-
Mengalokasikan batch ID di Datastore untuk kombinasi induk dan jenis Datastore.
ID yang dialokasikan dengan cara ini tidak akan digunakan oleh generator urutan ID otomatis Datastore dan dapat digunakan dalam kunci entity tanpa konflik.
Argumen
- model
- Kunci model yang akan digunakan untuk mengalokasikan batch ID. Ini adalah kunci reguler, tetapi hanya induk dan jenis kunci yang diperlukan untuk menentukan urutan ID yang akan digunakan.
- count
- Jumlah ID yang akan dialokasikan.
Menampilkan tuple ID pertama dan terakhir yang dialokasikan. Misalnya, jika mengalokasikan 10 ID menggunakan fungsi ini, Anda akan mendapatkan hasil dalam format (1, 10), bukan daftar lengkap ID yang dibuat.
Contoh pengalokasian dan penggunaan ID:
# allocate for MyModel without an instance handmade_key = db.Key.from_path('MyModel', 1) first_batch = db.allocate_ids(handmade_key, 10) first_range = range(first_batch[0], first_batch[1] + 1) # or allocate using an existing key model_instance = MyModel.all().get() second_batch = db.allocate_ids(model_instance.key(), 10) second_range = range(second_batch[0], second_batch[1] + 1) # and then use them! woo! my_id = second_range.pop(0) new_key = db.Key.from_path('MyModel', my_id) new_instance = MyModel(key=new_key) new_instance.put() assert new_instance.key().id() == my_id # the Datastore will not assign ids in first_batch or second_batch another_instance = MyModel() another_instance.put() assert another_instance.key().id() not in first_range assert another_instance.key().id() not in second_range
- allocate_ids_async (model, count)
-
Secara asinkron mengalokasikan batch ID di Datastore untuk kombinasi induk dan jenis Datastore.
Fungsi ini identik dengan
allocate_ids()
, kecuali bahwa fungsi tersebut menampilkan objek asinkron. Anda dapat memanggilget_result()
pada nilai yang ditampilkan untuk diblokir pada panggilan dan menampilkan hasilnya.Argumen
- model
- Instance
db.Model
, kunci, atau string yang berfungsi sebagai template yang menentukan urutan ID untuk mengalokasikan ID. ID yang ditampilkan hanya boleh digunakan dalam entity dengan induk (jika ada) dan jenis yang sama dengan kunci ini. - count
- Jumlah ID yang akan dialokasikan.
Menampilkan tuple ID pertama dan terakhir yang dialokasikan. Misalnya, jika Anda mengalokasikan 10 ID menggunakan fungsi ini, Anda akan mendapatkan nilai yang ditampilkan dalam format (1, 10), bukan daftar lengkap ID yang dibuat.
- allocate_id_range (model, start, end, **kwargs)
-
Mengalokasikan rentang ID dengan endpoint tertentu. Setelah ID ini dialokasikan, Anda dapat menetapkannya secara manual ke entity yang baru dibuat.
Pengalokasi ID otomatis Datastore tidak pernah menetapkan kunci yang telah dialokasikan (baik melalui alokasi ID otomatis maupun melalui panggilan `allocate_ids` eksplisit). Sebagai hasilnya, entity yang ditulis ke rentang kunci tertentu tidak akan pernah ditimpa. Namun, menulis entity dengan kunci yang ditetapkan secara manual dalam rentang ini dapat menimpa entity yang sudah ada (atau entity baru yang ditulis oleh permintaan terpisah), bergantung pada status rentang kunci yang ditampilkan.
Gunakan fungsi ini hanya jika Anda memiliki rentang ID numerik yang sudah ada yang ingin direservasi (misalnya, entity pemuatan massal yang sudah memiliki ID). Jika Anda tidak mementingkan ID yang Anda terima, gunakan
allocate_ids()
sebagai gantinya.Argumen
- model
- Instance
db.Model
, kunci, atau string yang berfungsi sebagai template yang menentukan urutan ID untuk mengalokasikan ID. ID yang ditampilkan hanya boleh digunakan dalam entity dengan induk (jika ada) dan jenis yang sama dengan kunci ini. - start
- ID pertama yang akan dialokasikan, sebuah angka.
- end
- ID terakhir yang akan dialokasikan, sebuah angka.
Menampilkan salah satu dari (
KEY_RANGE_EMPTY
,KEY_RANGE_CONTENTION
,KEY_RANGE_COLLISION
). Jika bukanKEY_RANGE_EMPTY
, hal ini menampilkan potensi masalah terkait penggunaan rentang kunci yang dialokasikan. - create_transaction_options (**kwargs)
-
Membuat objek opsi transaksi (class
TransactionOptions
) untuk mengontrol eksekusi transaksi. Anda meneruskan objek yang dihasilkan sebagai argumen pertama ke fungsirun_in_transaction_options()
.Argumen
- propagation
- Apa yang harus dilakukan jika fungsi transaksional ini dipanggil dari dalam transaksi lain:
- DIIZINKAN
- Jika sudah melakukan transaksi, terus gunakan transaksi tersebut; jika belum, mulailah membuat.
Catatan: Jika fungsi yang menggunakan kebijakan ini menampilkan pengecualian, mungkin tidak aman untuk menangkap pengecualian tersebut dan meng-commit transaksi luar; fungsi tersebut mungkin telah meninggalkan transaksi luar dalam kondisi buruk.
- WAJIB
- Lanjutkan pada transaksi yang sudah ada, jika ada; jika tidak, tampilkan pengecualian
BadRequestError
.Catatan: Jika fungsi yang menggunakan kebijakan ini menampilkan pengecualian, mungkin tidak aman untuk menangkap pengecualian tersebut dan meng-commit transaksi luar; fungsi tersebut mungkin telah meninggalkan transaksi luar dalam kondisi buruk.
- INDEPENDEN
- Buat transaksi baru, dengan menjeda transaksi yang ada.
Catatan: Fungsi yang menggunakan kebijakan ini tidak boleh menampilkan entity apa pun yang dibaca dalam transaksi baru karena entity tersebut tidak konsisten secara transaksional dengan transaksi luar.
- BERTINGKAT
- (Belum didukung) Buat transaksi bertingkat dalam transaksi yang sudah ada.
- xg
- Jika
True
, izinkan transaksi lintas grup (XG). Memunculkan pengecualianBadArgumentError
jika ditetapkan ke nilai non-boolean. - retries
- Jumlah percobaan ulang untuk mencoba kegagalan commit transaksi.
- deadline
- Waktu maksimum, dalam detik, untuk menunggu Datastore menampilkan hasil sebelum membatalkan dengan error. Menerima nilai berupa bilangan bulat atau floating point. Tidak dapat ditetapkan lebih tinggi dari nilai default (60 detik), tetapi dapat disesuaikan dengan diturunkan untuk memastikan operasi tertentu gagal dengan cepat (misalnya, untuk memberikan respons yang lebih cepat kepada pengguna, mencoba kembali operasi tersebut, mencoba operasi lain, atau menambahkan operasi ke task queue).
Contoh berikut akan membuat opsi untuk transaksi lintas grup (XG) berikutnya:
from google.appengine.ext import db xg_on = db.create_transaction_options(xg=True) def my_txn(): x = MyModel(a=3) x.put() y = MyModel(a=7) y.put() db.run_in_transaction_options(xg_on, my_txn)
- delete (models, deadline=60)
-
Menghapus satu atau beberapa instance model dari Datastore.
Argumen
- models
- Instance model, kunci entity, atau daftar (atau iterable lainnya) dari instance model atau kunci entity yang akan dihapus.
- deadline
- Waktu maksimum, dalam detik, untuk menunggu Datastore menampilkan hasil sebelum membatalkan dengan error. Menerima nilai berupa bilangan bulat atau floating point. Tidak dapat ditetapkan lebih tinggi dari nilai default (60 detik), tetapi dapat disesuaikan dengan diturunkan untuk memastikan operasi tertentu gagal dengan cepat (misalnya, untuk memberikan respons yang lebih cepat kepada pengguna, mencoba kembali operasi tersebut, mencoba operasi lain, atau menambahkan operasi ke task queue).
Seperti halnya
put()
, jika beberapa kunci diberikan, kunci tersebut mungkin ada di lebih dari satu entity group.Pengecualian akan selalu dimunculkan jika terjadi error selama operasi, meskipun beberapa entity benar-benar telah dihapus. Jika panggilan ditampilkan tanpa memunculkan pengecualian, berarti semua entity telah berhasil dihapus.
Perhatian: Menghapus beberapa entity dalam satu operasi tidak menjamin bahwa penghapusan akan terjadi secara atomik, kecuali jika operasi dilakukan di dalam transaksi. Proses lain yang mengkueri Datastore mungkin mendapati hasil yang tidak konsisten bahkan saat kueri dilakukan dengan konsistensi kuat.
- delete_async (models, deadline=60)
-
Menghapus satu atau beberapa instance model secara asinkron dari Datastore.
Fungsi ini identik dengan
delete()
, kecuali bahwa fungsi tersebut menampilkan objek asinkron. Anda dapat memanggilget_result()
pada nilai yang ditampilkan untuk diblokir pada panggilan.Argumen
- models
- Instance model, kunci entity, atau daftar (atau iterable lainnya) dari instance model atau kunci entity yang akan dihapus.
- deadline
- Waktu maksimum, dalam detik, untuk menunggu Datastore menampilkan hasil sebelum membatalkan dengan error. Menerima nilai berupa bilangan bulat atau floating point. Tidak dapat ditetapkan lebih tinggi dari nilai default (60 detik), tetapi dapat disesuaikan dengan diturunkan untuk memastikan operasi tertentu gagal dengan cepat (misalnya, untuk memberikan respons yang lebih cepat kepada pengguna, mencoba kembali operasi tersebut, mencoba operasi lain, atau menambahkan operasi ke task queue).
Seperti halnya
put()
, jika beberapa kunci diberikan, kunci tersebut mungkin ada di lebih dari satu entity group.Fungsi ini menampilkan objek yang memungkinkan Anda melakukan pemblokiran pada hasil panggilan.
Pengecualian akan selalu dimunculkan jika terjadi error selama operasi, meskipun beberapa entity benar-benar telah dihapus. Jika panggilan ditampilkan tanpa memunculkan pengecualian, berarti semua entity telah berhasil dihapus.
Perhatian: Menghapus beberapa entity dalam satu operasi tidak menjamin bahwa penghapusan akan terjadi secara atomik, kecuali jika operasi dilakukan di dalam transaksi. Proses lain yang mengkueri Datastore mungkin mendapati hasil yang tidak konsisten bahkan saat kueri dilakukan dengan konsistensi kuat.
- get (keys, read_policy=STRONG_CONSISTENCY, deadline=60)
-
Ambil instance Model spesifik dengan kunci tertentu dari Datastore.
Argumen
- keys
- Kunci entity yang akan diambil, representasi string dari kunci tersebut, atau daftar kunci atau representasi stringnya.
- read_policy
- Baca kebijakan yang menentukan tingkat konsistensi data yang diinginkan:
- STRONG_CONSISTENCY
- Menjamin hasil terbaru, tetapi terbatas pada satu entity group.
- EVENTUAL_CONSISTENCY
- Dapat mencakup beberapa entity group, tetapi terkadang dapat menampilkan hasil yang usang. Secara umum, kueri dengan konsistensi tertunda berjalan lebih cepat daripada kueri dengan konsistensi kuat, tetapi hal ini tidak selalu berlaku.
Catatan: Kueri global (non-ancestor) mengabaikan argumen ini.
- deadline
- Waktu maksimum, dalam detik, untuk menunggu Datastore menampilkan hasil sebelum membatalkan dengan error. Menerima nilai berupa bilangan bulat atau floating point. Tidak dapat ditetapkan lebih tinggi dari nilai default (60 detik), tetapi dapat disesuaikan dengan diturunkan untuk memastikan operasi tertentu gagal dengan cepat (misalnya, untuk memberikan respons yang lebih cepat kepada pengguna, mencoba kembali operasi tersebut, mencoba operasi lain, atau menambahkan operasi ke task queue).
Jika
keys
terdiri dari kunci tunggal (atau representasi string-nya), fungsi ini akan menampilkan instance model yang terkait dengan kunci jika kunci tersebut ada di Datastore, jika tidak,None
akan ditampilkan. Jikakeys
berupa daftar, nilai yang ditampilkan adalah daftar instance model yang sesuai, dengan nilaiNone
jika tidak ada entity untuk kunci yang diberikan.Lihat juga
Model.get()
. - get_async (keys, read_policy=STRONG_CONSISTENCY, deadline=60)
-
Mengambil secara asinkron instance Model yang ditentukan dari Datastore.
Fungsi ini identik dengan
get()
, kecuali bahwa fungsi tersebut menampilkan objek asinkron. Anda dapat memanggilget_result()
pada nilai yang ditampilkan untuk diblokir pada panggilan dan mendapatkan hasilnya.Argumen
- keys
- Kunci entity yang akan diambil, representasi string dari kunci tersebut, atau daftar kunci atau representasi stringnya.
- read_policy
- Baca kebijakan yang menentukan tingkat konsistensi data yang diinginkan:
- STRONG_CONSISTENCY
- Menjamin hasil terbaru, tetapi terbatas pada satu entity group.
- EVENTUAL_CONSISTENCY
- Dapat mencakup beberapa entity group, tetapi terkadang dapat menampilkan hasil yang usang. Secara umum, kueri dengan konsistensi tertunda berjalan lebih cepat daripada kueri dengan konsistensi kuat, tetapi hal ini tidak selalu berlaku.
Catatan: Kueri global (non-ancestor) mengabaikan argumen ini.
- deadline
- Waktu maksimum, dalam detik, untuk menunggu Datastore menampilkan hasil sebelum membatalkan dengan error. Menerima nilai berupa bilangan bulat atau floating point. Tidak dapat ditetapkan lebih tinggi dari nilai default (60 detik), tetapi dapat disesuaikan dengan diturunkan untuk memastikan operasi tertentu gagal dengan cepat (misalnya, untuk memberikan respons yang lebih cepat kepada pengguna, mencoba kembali operasi tersebut, mencoba operasi lain, atau menambahkan operasi ke task queue).
Jika
keys
terdiri dari kunci tunggal (atau representasi string-nya), fungsi ini akan menampilkan instance model yang terkait dengan kunci jika kunci tersebut ada di Datastore, jika tidak,None
akan ditampilkan. Jikakeys
berupa daftar, nilai yang ditampilkan adalah daftar instance model yang sesuai, dengan nilaiNone
jika tidak ada entity untuk kunci yang diberikan.Lihat juga
Model.get()
. - get_indexes ()
-
Menampilkan daftar indeks komposit milik aplikasi pemanggil.
Contoh berikut mengilustrasikan cara mendapatkan dan menggunakan indeks:
def get_index_state_as_string(index_state): return {db.Index.BUILDING:'BUILDING', db.Index.SERVING:'SERVING', db.Index.DELETING:'DELETING', db.Index.ERROR:'ERROR'}[index_state] def get_sort_direction_as_string(sort_direction): return {db.Index.ASCENDING:'ASCENDING', db.Index.DESCENDING:'DESCENDING'}[sort_direction] def dump_indexes(): for index, state in db.get_indexes(): print "Kind: %s" % index.kind() print "State: %s" % get_index_state_as_string(state) print "Is ancestor: %s" % index.has_ancestor() for property_name, sort_direction in index.properties(): print " %s:%s" % (property_name, get_sort_direction_as_string(sort_direction))
- get_indexes_async ()
-
Secara asinkron menampilkan daftar indeks komposit milik aplikasi pemanggil.
- is_in_transaction ()
-
Menampilkan boolean yang menunjukkan apakah cakupan saat ini dieksekusi dalam suatu transaksi.
- model_to_protobuf (model_instance)
-
Membuat serialisasi buffering protokol dari instance
Model
. Buffering protokol adalah format serialisasi Google yang digunakan untuk remote procedure call, dan dapat berguna untuk membuat serialisasi objek Datastore untuk tujuan pencadangan dan pemulihan.Perhatian: Fungsi ini menggunakan format yang berbeda (lebih lama) untuk buffering protokol daripada format buffering protokol open source, dan tidak kompatibel dengan implementasi open source.
Argumen
- model_instance
- Instance class
Model
(atau subclass) yang akan diserialisasi.
Menampilkan serialisasi buffering protokol objek, sebagai string byte.
- model_from_protobuf (pb)
-
Membuat instance
Model
berdasarkan serialisasi buffering protokol; lihatmodel_to_protobuf()
untuk mengetahui informasi selengkapnya.Argumen
- pb
- Serialisasi buffering protokol, seperti yang ditampilkan oleh
model_to_protobuf()
.
Menampilkan objek dari class jenis yang sesuai. Jika class jenis tidak ada, pengecualian
KindError
akan dimunculkan. Jika objek tidak valid menurut model, pengecualianBadValueError
akan dimunculkan.Anda dapat menyimpan objek baru ke Datastore seperti halnya instance
Model
lain, misalnya dengan memanggil metodeput()
-nya. Objek mempertahankan kunci yang dimilikinya saat buffering protokol dibuat. Jika objek dengan kunci tersebut sudah ada di Datastore, menyimpan objek yang dideserialisasi akan menimpa objek yang ada.Perhatian: Jika kunci objek menggunakan ID yang ditetapkan oleh sistem dan ID tersebut belum dialokasikan untuk jalur dan jenis yang diberikan, proses penyimpanan akan berhasil, tetapi ID tersebut tidak akan berhasil direservasi. Objek yang dibuat di masa mendatang dapat diberi ID tersebut, dan akan menimpa objek sebelumnya. Untuk keamanan, pulihkan objek hanya dalam aplikasi yang sama tempat objek tersebut berada saat diserialisasi.
- model_is_projection (model_instance)
-
Menampilkan
True
jika kueri yang ditentukan (model_instance
) adalah kueri proyeksi, bukan kueri untuk entity penuh.Argumen
- model_instance
- Kueri yang Anda periksa untuk menentukan apakah kueri tersebut merupakan kueri proyeksi.
Menampilkan
True
jika kuerinya adalah kueri proyeksi, menampilkanFalse
jika bukan. - put (models, deadline=60)
-
Menulis satu atau beberapa instance model ke Datastore.
Argumen
- models
- Instance model atau daftar instance model yang akan disimpan.
- deadline
- Waktu maksimum, dalam detik, untuk menunggu Datastore menampilkan hasil sebelum membatalkan dengan error. Menerima nilai berupa bilangan bulat atau floating point. Tidak dapat ditetapkan lebih tinggi dari nilai default (60 detik), tetapi dapat disesuaikan dengan diturunkan untuk memastikan operasi tertentu gagal dengan cepat (misalnya, untuk memberikan respons yang lebih cepat kepada pengguna, mencoba kembali operasi tersebut, mencoba operasi lain, atau menambahkan operasi ke task queue).
Jika beberapa instance model diberikan, instance tersebut mungkin ada di lebih dari satu entity group.
Pengecualian akan selalu dimunculkan jika terjadi error selama operasi, meskipun beberapa entity benar-benar telah ditulis. Jika panggilan ditampilkan tanpa memunculkan pengecualian, berarti semua entity telah berhasil ditulis.
Jika
models
terdiri dari satu instance model, fungsi ini akan menampilkan objek Kunci yang sesuai. Jikamodels
berupa daftar, nilai yang ditampilkan adalah daftar objek Kunci yang sesuai.Perhatian: Menulis beberapa entity dalam satu operasi tidak menjamin bahwa penulisan akan terjadi secara atomik, kecuali jika operasi dilakukan di dalam transaksi. Proses lain yang mengkueri Datastore mungkin mendapati hasil yang tidak konsisten bahkan saat kueri dilakukan dengan konsistensi kuat.
- put_async (models, deadline=60)
-
Menulis satu atau beberapa instance model ke Datastore.
Fungsi ini identik dengan
put()
, kecuali bahwa fungsi tersebut menampilkan objek asinkron. Anda dapat memanggilget_result()
pada nilai yang ditampilkan untuk diblokir pada panggilan dan mendapatkan hasilnya.Argumen
- models
- Instance model atau daftar instance model yang akan disimpan.
- deadline
- Waktu maksimum, dalam detik, untuk menunggu Datastore menampilkan hasil sebelum membatalkan dengan error. Menerima nilai berupa bilangan bulat atau floating point. Tidak dapat ditetapkan lebih tinggi dari nilai default (60 detik), tetapi dapat disesuaikan dengan diturunkan untuk memastikan operasi tertentu gagal dengan cepat (misalnya, untuk memberikan respons yang lebih cepat kepada pengguna, mencoba kembali operasi tersebut, mencoba operasi lain, atau menambahkan operasi ke task queue).
Jika beberapa instance model diberikan, instance tersebut mungkin ada di lebih dari satu entity group.
Pengecualian akan selalu dimunculkan jika terjadi error selama operasi, meskipun beberapa entity benar-benar telah ditulis. Jika panggilan ditampilkan tanpa memunculkan pengecualian, berarti semua entity telah berhasil ditulis.
Fungsi ini menampilkan objek asinkron yang dapat memanggil
get_result()
. Hasil yang ditampilkan sama seperti hasil untukput()
.Perhatian: Menulis beberapa entity dalam satu operasi tidak menjamin bahwa penulisan akan terjadi secara atomik, kecuali jika operasi dilakukan di dalam transaksi. Proses lain yang mengkueri Datastore mungkin mendapati hasil yang tidak konsisten bahkan saat kueri dilakukan dengan konsistensi kuat.
- query_descendants (model_instance)
-
Menampilkan kueri untuk semua turunan dari instance model.
Argumen
- model_instance
- Instance model yang turunannya ingin Anda temukan.
- run_in_transaction (function, *args, **kwargs)
-
Menjalankan fungsi yang berisi pembaruan Datastore dalam satu transaksi. Jika ada kode yang memunculkan pengecualian selama transaksi, semua pembaruan yang dilakukan dalam transaksi akan di-roll back. Atau, Anda dapat menggunakan dekorator
@db.transactional()
.Argumen
- function
- Fungsi yang akan dieksekusi.
- args
- Argumen posisi yang akan diteruskan ke fungsi.
- kwargs
- Argumen kata kunci yang akan diteruskan ke fungsi.
Jika fungsi menampilkan nilai,
run_in_transaction()
akan menampilkan nilai tersebut ke pemanggil.Jika fungsi tersebut memunculkan pengecualian, transaksi akan di-roll back. Jika pengecualiannya adalah pengecualian
Rollback
, pengecualian tersebut tidak akan dimunculkan kembali; pengecualian lain akan dimunculkan kembali ke pemanggil.Datastore menggunakan penguncian dan percobaan ulang optimis untuk transaksi. Jika transaksi yang disiapkan oleh fungsi tidak dapat di-commit,
run_in_transaction()
akan memanggil fungsi lagi, yang mencoba kembali transaksi tersebut hingga 3 kali. (Untuk menggunakan jumlah percobaan ulang yang berbeda, gunakanrun_in_transaction_custom_retries()
.) Karena fungsi transaksi dapat dipanggil lebih dari sekali untuk satu transaksi, fungsi tersebut tidak boleh memiliki efek samping, termasuk modifikasi pada argumen.Jika transaksi tidak dapat di-commit, misalnya karena tingginya tingkat konflik, pengecualian
TransactionFailedError
akan muncul.from google.appengine.ext import db class Counter(db.Model): name = db.StringProperty() count = db.IntegerProperty(default=0) def decrement(key, amount=1): counter = db.get(key) counter.count -= amount if counter.count < 0: # Don't let counter go negative raise db.Rollback() db.put(counter) q = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", "foo") counter = q.get() db.run_in_transaction(decrement, counter.key(), amount=5)
- run_in_transaction_custom_retries (retries, function, *args, **kwargs)
-
Menjalankan fungsi yang berisi pembaruan Datastore dalam satu transaksi, yang mencoba kembali transaksi tersebut beberapa kali jika terjadi konflik. Jika ada kode yang memunculkan pengecualian selama transaksi, semua pembaruan yang dilakukan dalam transaksi akan di-roll back.
Selain dapat menentukan jumlah percobaan ulang, fungsi ini berperilaku identik dengan
run_in_transaction()
.Argumen
- retries
- Frekuensi maksimum untuk memanggil fungsi jika terjadi konflik dalam entity group (lebih dari satu pengguna yang mencoba mengubah grup secara bersamaan).
- function
- Fungsi yang akan dieksekusi.
- args
- Argumen posisi yang akan diteruskan ke fungsi.
- kwargs
- Argumen kata kunci yang akan diteruskan ke fungsi.
- run_in_transaction_options (options, function, *args, **kwargs)
-
Menjalankan fungsi yang berisi pembaruan Datastore dalam satu transaksi menggunakan opsi yang ditentukan dalam objek opsi transaksi. Jika ada kode yang memunculkan pengecualian selama transaksi, semua pembaruan Datastore yang dilakukan dalam transaksi akan di-roll back.
Untuk transaksi lintas grup (XG), parameter
xg
di objek opsi transaksi harus ditetapkan keTrue
.Argumen
- options
- Objek opsi transaksi yang berisi setelan yang digunakan oleh transaksi ini. Untuk mengaktifkan transaksi XG, parameter xg-nya harus ditetapkan ke
True
. - function
- Fungsi yang akan dieksekusi.
- args
- Argumen posisi yang akan diteruskan ke fungsi.
- kwargs
- Argumen kata kunci yang akan diteruskan ke fungsi.
Jika fungsi menampilkan nilai,
run_in_transaction_options()
akan menampilkan nilai tersebut ke pemanggil.Jika fungsi tersebut memunculkan pengecualian, transaksi akan di-roll back. Jika pengecualiannya adalah pengecualian
Rollback
, pengecualian tersebut tidak akan dimunculkan kembali; pengecualian lain akan dimunculkan kembali ke pemanggil.Datastore menggunakan penguncian dan percobaan ulang optimis untuk transaksi. Jika transaksi yang disiapkan oleh fungsi tidak dapat di-commit,
run_in_transaction_options()
akan memanggil kembali fungsi, yang mencoba kembali transaksi tersebut hingga jumlah percobaan ulang yang ditentukan dalam objek opsi transaksi. Karena fungsi transaksi dapat dipanggil lebih dari sekali untuk satu transaksi, fungsi ini tidak boleh memiliki efek samping, termasuk modifikasi pada argumen.Jika transaksi tidak dapat di-commit, misalnya karena tingginya tingkat konflik, pengecualian
TransactionFailedError
akan muncul.Contoh berikut menunjukkan cara menggunakan fungsi ini untuk menjalankan transaksi lintas grup:
from google.appengine.ext import db xg_options = db.create_transaction_options(xg=True) def my_txn(): x = MyModel(a=3) x.put() y = MyModel(a=7) y.put() db.run_in_transaction_options(xg_options, my_txn)
- to_dict (model_instance, dictionary=None)
-
Membuat dan menampilkan representasi kamus dari instance model.
Argumen
- model_instance
- Instance model yang akan disalin.
- dictionary
- Jika ada, kamus untuk menggabungkan data model. Nilai model akan menimpa nilai dalam kamus; entri kamus yang tidak sesuai dengan kolom dalam instance model akan dipertahankan.
Dekorator
- @db.transactional (propagation=ALLOWED, xg=False, retries=3, deadline=60)
-
Membuat fungsi dijalankan di dalam transaksi
db
. Dengan demikian, Anda dapat memanggilfunc()
, bukan memanggilrun_in_transaction(func)
.Argumen
- propagation
- Apa yang harus dilakukan jika fungsi transaksional ini dipanggil dari dalam transaksi lain:
- DIIZINKAN
- Jika sudah melakukan transaksi, terus gunakan transaksi tersebut; jika belum, mulailah membuat.
Catatan: Jika fungsi yang menggunakan kebijakan ini menampilkan pengecualian, mungkin tidak aman untuk menangkap pengecualian tersebut dan meng-commit transaksi luar; fungsi tersebut mungkin telah meninggalkan transaksi luar dalam kondisi buruk.
- WAJIB
- Lanjutkan pada transaksi yang sudah ada, jika ada; jika tidak, tampilkan pengecualian
BadRequestError
.Catatan: Jika fungsi yang menggunakan kebijakan ini menampilkan pengecualian, mungkin tidak aman untuk menangkap pengecualian tersebut dan meng-commit transaksi luar; fungsi tersebut mungkin telah meninggalkan transaksi luar dalam kondisi buruk.
- INDEPENDEN
- Buat transaksi baru, dengan menjeda transaksi yang ada.
Catatan: Fungsi yang menggunakan kebijakan ini tidak boleh menampilkan entity apa pun yang dibaca dalam transaksi baru karena entity tersebut tidak konsisten secara transaksional dengan transaksi luar.
- BERTINGKAT
- (Belum didukung) Buat transaksi bertingkat dalam transaksi yang sudah ada.
- xg
- Jika
True
, izinkan transaksi lintas grup (XG). Memunculkan pengecualianBadArgumentError
jika ditetapkan ke nilai non-boolean. - retries
- Jumlah percobaan ulang untuk mencoba kegagalan commit transaksi.
- deadline
- Waktu maksimum, dalam detik, untuk menunggu Datastore menampilkan hasil sebelum membatalkan dengan error. Menerima nilai berupa bilangan bulat atau floating point. Tidak dapat ditetapkan lebih tinggi dari nilai default (60 detik), tetapi dapat disesuaikan dengan diturunkan untuk memastikan operasi tertentu gagal dengan cepat (misalnya, untuk memberikan respons yang lebih cepat kepada pengguna, mencoba kembali operasi tersebut, mencoba operasi lain, atau menambahkan operasi ke task queue).
- @db.non_transactional (allow_existing=True)
-
Memastikan bahwa fungsi dijalankan di luar transaksi
db
, meskipun dipanggil dari dalam transaksi.Argumen
- allow_existing
- Jika
True
, izinkan fungsi dipanggil dari dalam transaksi yang sudah ada; jikaFalse
, tampilkan pengecualianBadRequestError
.