Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede arka uç üzerinden SQL Server ile Django'nun bulk_create ve bulk_update yöntemlerinin mssql-django nasıl kullanılacağı açıklanmaktadır.
toplu_oluştur
Tek bir veritabanı işlemine birden çok kayıt eklemek için kullanın bulk_create :
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)
Toplu ekleme işleminden satırları döndürme
Varsayılan olarak, bulk_create SQL Server kullanılırken doldurulan birincil anahtarları döndürmez. Geri dönen birincil anahtarları etkinleştirmek için veritabanınızda return_rows_bulk_insertolarak True ayarlayınOPTIONS:
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
Herhangi bir hedef tabloda tetikleyici varsa return_rows_bulk_insert değerini False olarak ayarlayın (varsayılan). Satır döndürmek için kullanılan OUTPUT yan tümcesi, INSERT tetikleyicilerine sahip tablolarla uyumlu değildir.
bulk_update
Tek bir veritabanı işleminde birden çok kaydı güncelleştirmek için kullanın bulk_update :
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"])
Varsayılan parametre
mssql-django Arka uç, geriye dönük uyumluluk için bulk_update üzerinde bir default parametresini hâlâ kabul eder, ancak bu parametre mevcut sürümlerde üretilen SQL’i etkilemez.
At least one of the result expressions in a CASE specification must be an expression other than the NULL constant.
Arka uç artık tüm-NULL güncelleme durumlarını default gerektirmeden işler.
Note
Eski sürümlerde, kullanımdan çıkarma default işlemi önceki örnekte gösterilen SQL Server hatasını tetikleyebilir. Bu parametre, yalnızca eski çağrı noktalarının bozulmasını önlemek için desteklenmeye devam ediyor.
Parti boyutu
Büyük veri kümelerinde, SQL deyimi başına satır sayısını sınırlamak için parametresini kullanın batch_size :
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)