Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u Django's bulk_create en bulk_update methoden gebruikt met SQL Server via de mssql-django back-end.
meerdere items aanmaken
Gebruik bulk_create dit om meerdere records in te voegen in één databasebewerking:
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)
Rijen retourneren uit een bulkinvoeging
bulk_create Standaard worden niet ingevulde primaire sleutels geretourneerd bij het gebruik van SQL Server. Als u het retourneren van primaire sleutels wilt inschakelen, stelt u return_rows_bulk_insert in uw database OPTIONS in op True:
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
Ingesteld return_rows_bulk_insert op False (de standaardinstelling) als een doeltabel triggers heeft. De OUTPUT component die wordt gebruikt om rijen te retourneren, is niet compatibel met tabellen met INSERT triggers.
bulksgewijs bijwerken
Gebruik bulk_update dit om meerdere records bij te werken in één databasebewerking:
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"])
De standaardparameter
De mssql-django backend accepteert nog steeds een default-parameter op bulk_update voor achterwaartse compatibiliteit, maar die heeft geen invloed op de gegenereerde SQL in de huidige releases.
At least one of the result expressions in a CASE specification must be an expression other than the NULL constant.
De backend verwerkt nu alle all-NULL-updategevallen zonder dat default vereist is.
Note
In oudere versies kan weglaten default de SQL Server fout activeren die in het vorige voorbeeld wordt weergegeven. De parameter blijft alleen geaccepteerd om te voorkomen dat oudere oproepsites worden onderbroken.
Batchgrootte
Voor grote gegevenssets gebruikt u de batch_size parameter om het aantal rijen per SQL-instructie te beperken:
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)