Django ialah rangka kerja web Python yang popular Kecekapan dan kebolehskalaannya adalah salah satu sebab popularitinya. Dalam aplikasi, kadangkala interaksi data yang kompleks dan konsisten antara berbilang permintaan perlu dikendalikan Pada masa ini, anda perlu menggunakan teknik pemprosesan transaksi dalam Django untuk memastikan integriti dan konsistensi data.
Dalam Django, terdapat dua cara pemprosesan transaksi: pemprosesan transaksi berasaskan fungsi dan pemprosesan transaksi berasaskan pengurus konteks. Artikel ini akan memberikan analisis terperinci mengenai kedua-dua teknik ini.
1. Pemprosesan transaksi berasaskan fungsi
Django menyediakan transaction.atomic() penghias untuk melaksanakan pemprosesan transaksi berasaskan fungsi. Penghias ini boleh digunakan pada fungsi pandangan (pandangan) dan arahan pengurusan (perintah pengurusan).
Gunakan penghias ini dalam fungsi paparan Apabila fungsi paparan mengembalikan kod respons HTTP HTTP 500 (ralat pelayan), Django akan melancarkan semula semua operasi yang ditulis ke pangkalan data.
Sebagai contoh, berikut ialah fungsi paparan yang memproses data yang dihantar dari bahagian hadapan dan perlu mengemas kini berbilang jadual pada masa yang sama:
@transaction.atomic def my_view(request): # 处理从前端传入的数据 # ... # 更新表1 # ... # 更新表2 # ...
Dalam kod di atas, apabila pengecualian berlaku, Semua operasi tulis ke pangkalan data akan dibatalkan secara automatik untuk memastikan integriti dan konsistensi data. Pada masa yang sama, penghias juga menyokong berbilang transaksi bersarang Apabila transaksi bersarang gagal, hanya pangkalan data yang dikendalikan oleh transaksi bersarang akan ditarik balik, tetapi bukan semua transaksi.
2. Pemprosesan transaksi berdasarkan pengurus konteks
Dalam Django 1.8, pemprosesan transaksi berdasarkan pengurus konteks telah diperkenalkan.
Berikut ialah contoh penggunaan pernyataan dengan:
from django.db import transaction def my_view(request): with transaction.atomic(): # 处理请求 # ... # 更新表1 # ... # 更新表2 # ...
Dalam kod di atas, transaksi akan dilakukan secara automatik atau ditarik balik. Kesannya konsisten dengan menggunakan transaction.atomic().
Selain itu, jika anda perlu memulakan transaksi secara manual dan memantau kemungkinan mesej ralat, anda boleh menggunakan transaction.set_autocommit(False):
from django.db import connection, transaction def my_view(request): connection.set_autocommit(False) try: # 处理请求 # ... # 更新表1 # ... # 更新表2 # ... connection.commit() except: connection.rollback() finally: connection.set_autocommit(True)
Di atas ialah kaedah untuk mengawal transaksi secara manual dalam fungsi, kod Lebih panjang. Jika anda perlu menggunakannya semula, anda boleh merangkum kaedah ini ke dalam kelas yang berasingan.
3. Nota
Apabila menggunakan pemprosesan transaksi dalam Django, anda perlu memberi perhatian kepada perkara berikut:
1 Django akan menyerahkan operasi pengubahsuaian pangkalan data secara lalai. Ini Urus niaga tidak akan dilaksanakan pada masa ini. Set_autocommit(False) perlu ditetapkan untuk melumpuhkan komit automatik.
2. Jika anda perlu menangani kebuntuan atau pengecualian lain, anda perlu menggunakan mekanisme pengendalian pengecualian untuk mengelakkan kerosakan data.
3. Apabila menggunakan transaksi dalam arahan pengurusan, anda perlu memberi perhatian kepada masa penghantaran transaksi. Oleh kerana arahan boleh berjalan lama, transaksi jangka panjang boleh mengambil terlalu banyak sumber pangkalan data, menyebabkan keseluruhan pangkalan data menjadi perlahan. Dalam kes ini, pakej pihak ketiga seperti django-extensions boleh digunakan untuk mengoptimumkan transaksi yang berjalan lama.
Ringkasnya, menggunakan teknik pemprosesan transaksi dalam Django boleh memastikan integriti dan konsistensi data dan mengurangkan rasuah data yang disebabkan oleh operasi yang tidak dijangka. Pada masa yang sama, memahami kemahiran pemprosesan transaksi Django juga boleh membantu pembangun mengoptimumkan kod dengan lebih baik dan meningkatkan kecekapan pengendalian aplikasi.
Atas ialah kandungan terperinci Kemahiran pemprosesan transaksi dalam rangka kerja Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!