Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara menggunakan metode bulk_create dan bulk_update Django dengan SQL Server melalui backend mssql-django.
bulk_create
Gunakan bulk_create untuk menyisipkan beberapa rekaman dalam satu operasi database:
from myapp.models import Product
products = [
Product(name="Widget A", price=9.99),
Product(name="Widget B", price=14.99),
Product(name="Widget C", price=19.99),
]
Product.objects.bulk_create(products)
Mengembalikan baris dari sisipan massal
Secara default, bulk_create tidak mengembalikan kunci primer yang diisi saat menggunakan SQL Server. Untuk mengaktifkan pengembalian kunci primer, atur return_rows_bulk_insert ke True di basis data OPTIONS Anda:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"return_rows_bulk_insert": True,
},
},
}
Important
Atur return_rows_bulk_insert ke False (default) jika ada tabel target yang memiliki pemicu. Klausa OUTPUT yang digunakan untuk mengembalikan baris tidak kompatibel dengan tabel yang memiliki INSERT pemicu.
pembaruan massal
Gunakan bulk_update untuk memperbarui beberapa rekaman dalam satu operasi database:
from decimal import Decimal
from myapp.models import Product
products = Product.objects.filter(category="widgets")
for product in products:
product.price = product.price * Decimal("1.10") # 10% price increase
Product.objects.bulk_update(products, ["price"])
Parameter bawaan
Backend mssql-django masih menerima parameter default pada bulk_update demi kompatibilitas dengan versi sebelumnya, tetapi parameter tersebut tidak memengaruhi SQL yang dihasilkan dalam versi saat ini.
At least one of the result expressions in a CASE specification must be an expression other than the NULL constant.
Backend sekarang menangani semua kasusNULL pembaruan tanpa memerlukan default.
Note
Dalam versi yang lebih lama, menghilangkan default dapat memicu kesalahan SQL Server yang ditampilkan dalam contoh sebelumnya. Parameter tetap diterima hanya untuk menghindari melanggar situs panggilan yang lebih lama.
Ukuran batch
Untuk himpunan data besar, gunakan batch_size parameter untuk membatasi jumlah baris per pernyataan SQL:
from myapp.models import Product
new_products = [Product(name=f"Widget {i}") for i in range(2000)]
Product.objects.bulk_create(new_products, batch_size=500)
products = list(Product.objects.filter(name__startswith="Widget "))
Product.objects.bulk_update(products, ["price"], batch_size=500)