Amer Abdallah نشر 19 سبتمبر 2021 أرسل تقرير نشر 19 سبتمبر 2021 أرغب في تحديث جدول في قاعدة البيانات باستخدام جانغو Django، بحيث يتم تنفيذ جملة SQL التالية في النهاية: update tbl_name set name = 'new name' where name = 'old name' حاولت أن أقوم بالكود التالي، لكن أعتقد أنه ليس من العملي أن أقوم بالمرور على كل كائن في قاعدة البيانات وأغير قيمة name ثم أحفظ الكائن الجديد: list = ModelClass.objects.filter(name = 'bar') for obj in list: obj.name = 'foo' obj.save() هل هناك طريقة أكثر فعالية وسرعة من الكود السابق؟ 2 اقتباس
1 سامح أشرف نشر 19 سبتمبر 2021 أرسل تقرير نشر 19 سبتمبر 2021 بداية من الإصدار 2.2 من جانغو Django أصبح بإمكانك تعديل مجموعة من الكائنات دفة واحدة من خلال التابع bulk_update، كالتالي: >>> objs = [ ... Entry.objects.create(name='old name 1'), ... Entry.objects.create(name='old name 2'), ... ] >>> objs[0].name = 'new name 1' >>> objs[1].name = 'new name 2' >>> Entry.objects.bulk_update(objs, ['name']) تقوم هذه الطريقة بتحديث الحقول المحددة بكفاءة في كائنات النموذج المتوفرة، بشكل عام باستخدام استعلام واحد فقط. أما بالنسبة للإصدارات الأقدم (تعمل الطريقة مع كل إصدارات جانغو Django) فيمكنك أن تقوم بعمل التالي: Entry.objects.filter(name='old name').update(name="new name") يعيد الكود السابق عدد الكائنات التي تم تحديثها في قاعدة البيانات كرقم صحيح Integer ملاحظة: إن كان لديك كود في التابع save فلن يتم تنفيذه، حيث أن التابع save لا يتم إستدعائه من البداية. 2 اقتباس
0 Ahmed Sharshar نشر 19 سبتمبر 2021 أرسل تقرير نشر 19 سبتمبر 2021 يمكنك استخدام bulk_update بسهولة لفعل ذلك. في البداية عليك تنزيلها كالتالي: pip install django-bulk-update بعد ذلك يمكنك استخدامها بسهوله كما المثال التالي: from bulk_update.helper import bulk_update random_names = ['Walter', 'The Dude', 'Donny', 'Jesus'] people = Person.objects.all() for person in people: r = random.randrange(4) person.name = random_names[r] bulk_update(people) # تحديث كل الأعمدة من قاعدة البيانات وفي حالتك يمكنك تنفيذها في سطر واحد كالتالي: ModelClass.objects.filter(name='bar').update(name="foo") 1 اقتباس
السؤال
Amer Abdallah
أرغب في تحديث جدول في قاعدة البيانات باستخدام جانغو Django، بحيث يتم تنفيذ جملة SQL التالية في النهاية:
حاولت أن أقوم بالكود التالي، لكن أعتقد أنه ليس من العملي أن أقوم بالمرور على كل كائن في قاعدة البيانات وأغير قيمة name ثم أحفظ الكائن الجديد:
هل هناك طريقة أكثر فعالية وسرعة من الكود السابق؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.