Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan használhatók a Django bulk_create és bulk_update metódusai az SQL Serverrel a mssql-django háttérrendszeren keresztül.
tömeges létrehozás
Több bulk_create rekord beszúrása egyetlen adatbázisműveletbe:
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)
Sorok visszaadása tömeges beszúrásból
Alapértelmezés szerint bulk_create nem ad vissza kitöltött elsődleges kulcsokat SQL Server használatakor. Az elsődleges kulcsok visszaadásának engedélyezéséhez állítsa return_rows_bulk_insertTrue be az adatbázisban OPTIONS:
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
return_rows_bulk_insert Ha bármelyik céltábla eseményindítókkal rendelkezik, állítsa False (az alapértelmezett) értékre. A OUTPUT sorok visszaadására használt záradék nem kompatibilis az eseményindítókkal rendelkező INSERT táblákkal.
bulk_update
Több rekord frissítésére használható bulk_update egyetlen adatbázisműveletben:
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"])
Az alapértelmezett paraméter
A mssql-django háttérrendszer továbbra is elfogad egy paramétert default a bulk_update visszamenőleges kompatibilitás érdekében, de ez nem befolyásolja a jelenlegi kiadásokban létrehozott SQL-t.
At least one of the result expressions in a CASE specification must be an expression other than the NULL constant.
A backend mostantól az összesNULL frissítési esetet kezeli anélkül, hogy default szükséges lenne.
Note
A régebbi verziókban a kihagyás default kiválthatja az előző példában látható SQL Server hibát. A paraméter csak a régebbi híváswebhelyek feltörésének elkerülése érdekében lesz elfogadva.
Köteg mérete
Nagy adathalmazok esetén a batch_size paraméter használatával korlátozhatja az SQL-utasításonkénti sorok számát:
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)