Datastore Functions

Catatan: Developer yang membangun 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 memanggil get_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 bukan KEY_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 fungsi run_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.

DISARANKAN
(Belum didukung) Buat transaksi bertingkat dalam transaksi yang sudah ada.
xg
Jika True, izinkan transaksi lintas grup (XG). Memunculkan pengecualian BadArgumentError 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 memanggil get_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. Jika keys berupa daftar, nilai yang ditampilkan adalah daftar instance model yang sesuai, dengan nilai None 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 memanggil get_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. Jika keys berupa daftar, nilai yang ditampilkan adalah daftar instance model yang sesuai, dengan nilai None 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; lihat model_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, pengecualian BadValueError akan dimunculkan.

Anda dapat menyimpan objek baru ke Datastore seperti halnya instance Model lain, misalnya dengan memanggil metode put()-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, menampilkan False 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. Jika models 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 memanggil get_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 untuk put().

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, gunakan run_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 ke True.

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 memanggil func(), bukan memanggil run_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.

DISARANKAN
(Belum didukung) Buat transaksi bertingkat dalam transaksi yang sudah ada.
xg
Jika True, izinkan transaksi lintas grup (XG). Memunculkan pengecualian BadArgumentError 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; jika False, tampilkan pengecualian BadRequestError.