bulk_create()
إنشاء عدّة سجلات باستعلام واحد bulk_create()
bulk_create() تُنشئ قائمة كاملة من الكائنات بأقل عدد استعلامات ممكن (غالبًا استعلام إدراج واحد)، أسرع بكثير من حلقة create() لكل عنصر.
تأخذ قائمة كائنات نموذج غير محفوظة بعد (لم تُستدعَ عليها save()) وتُدرجها دفعة واحدة. لا تستدعي save() ولا تُطلق إشارات pre_save/post_save لكل كائن، ولا تُعيد تعبئة المفتاح الأساسي (pk) على كائنات SQLite القديمة بكل الحالات — تحقّق من سلوك قاعدة بياناتك.
الصياغة
Model.objects.bulk_create([obj1, obj2, ...], batch_size=None)
📄 مثال
posts_to_create = [
Post(title=f"مقال {i}", slug=f"article-{i}", status="draft")
for i in range(1, 101)
]
Post.objects.bulk_create(posts_to_create, batch_size=50)
# استعلامان فقط بدل 100 استعلام create() منفصلأهم المعاملات
| المعامل | الوظيفة |
|---|---|
| batch_size | عدد أقصى للسجلات بكل جملة إدراج واحدة — مفيد لتفادي حدّ حجم استعلام قاعدة البيانات |
| ignore_conflicts | تجاهل صفوف تسبّب تعارض قيد فريد بدل إيقاف العملية كاملة |
💡 نصائح عملية
- استخدمها دائمًا بدل حلقة for + create() عند إدراج عشرات أو مئات السجلات دفعة واحدة (استيراد بيانات مثلًا)
⚠️ أخطاء شائعة
- توقّع تنفيذ منطق save() المخصّص أو إشارات post_save بعد bulk_create() — لا تُطلَق إطلاقًا لنفس سبب update()
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DJANGO الكامل بالعربي.