![](/img/trans.png)
[英]django, How to use bulk_create(objs,batch_size=None)
[英]Bulk_create is not working with batch_size parameter
我正在嘗試使用bulk_create,但它只創建一個對象而不是我規定的batch_size。 我正在為 batch_size 使用一個變量,所以也許這就是問題所在,但我想不出為什么它會成為問題。 這是代碼:
x = 40 / 2
if 5 > 4:
objs1 =
ModelT(
name=instance.name,
author=instance.author,
content=instance.content
)
ModelT.objects.bulk_create(objs1, batch_size=x)
我也試過:
ModelT.objects.bulk_create(objs1, x)
也沒有工作。
.bulk_create
[Django-doc]將對象列表存儲到數據庫中。 batch_size
用於確定每個查詢在數據庫中存儲了多少對象。
例如,如果您有一個包含 100 個元素的列表,並且batch_size=10
,它將導致 10 個查詢,如果batch_size=25
,它將導致 4 個查詢(假設查詢不太長)。 或者按照文檔中的說明:
此方法以高效的方式將提供的對象列表插入到數據庫中(通常只有 1 個查詢,無論有多少個對象)。
因此, batch_size
參數僅用於“限制”每個查詢存儲的元素數量,對於某些數據庫系統,最好使用多個查詢,例如,在大量插入期間仍然可以訪問該表。
然而,在這里你只給了函數一個元素的列表,所以不管batch_size
是多少,你都可以創建一個包含 20 個ModelT
的列表:
objs1 = [
ModelT(name=instance.name, author=instance.author, content=instance.content)
for _ in range(20)
]
ModelT.objects.bulk_create(objs1)
如果所有對象都具有相同的內容,我們甚至可以乘以一個數字:
objs1 = [
ModelT(name=instance.name, author=instance.author, content=instance.content)
] * 20
ModelT.objects.bulk_create(objs1)
請注意,如文檔中所述,不會pre_save
和post_save
信號,並且除非數據庫后端是 PostgreSQL,否則不會設置對象的id
(對於后一種方法,這將不起作用,因為我們在這里構造了一個列表有 20 個對同一對象的引用)。
您仍然可以在此處使用上述語義指定batch_size
,但這不會產生功能差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.