• 1

كيفية التراجع عن آخر عملية تهجير للبيانات في جانغو Django؟

لقد أجريت عملية تهجير للبيانات وتمت إضافة جدول جديد وأريد التراجع عنه وحذف آخر عملية تهجير، بدون إنشاء ملف تهجير جديد.

كيف يمكنني فعل ذلك؟ هل هناك أمر للتراجع عن آخر عملية تهجير للبيانات لأقوم لعد ذلك بحذف ملف التهجير فقط؟

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يمكنك التراجع عبر التهجير الى التهجير السابق

على سبيل المثال ، إذا كان آخر تهجيرين لك هما:

  • 0010_previous_migration
  • 0011_migration_to_revert

ثم ستقوم بتنفيذ:

./manage.py migrate my_app 0010_previous_migration 

لا تحتاج فعليًا إلى استخدام اسم التهجير الكامل ، فالرقم كافٍ ، أي

./manage.py migrate my_app 0010 

ثم بعد ذلك يمكنك حذف التهجير 0011_migration_to_revert.

إذا كنت تستخدم Django 1.8 ومافوق ، فيمكنك إظهار أسماء جميع عمليات التهجير باستخدام

./manage.py showmigrations my_app

لعكس جميع عمليات التهجير لأحد التطبيقات ، يمكنك تنفيذ:

./manage.py migrate my_app zero

لكن يجب الإشارة إلى أنه لا يمكن عكس جميع الهجرات . يحدث هذا إذا لم يكن لدى Django قاعدة للقيام بعملية العكس.

 بالنسبة لأغلب التغييرات التي أجريت عمليات التهجير بشكل تلقائي بإستخدام

/manage.py makemigrations

سيكون الإلغاء أو التراجع ممكنًا.

مع ذلك فإن النصوص البرمجية المخصصة ستحتاج إلى كتابة الأمام والعكس.

وايضاً لا تحذف ملف التهجير إلا بعد الرجوع. لأنه بدون ملف التهجير ، لم تكن قاعدة البيانات تعرف الأشياء التي يجب إزالتها.

python manage.py showmigrations
python manage.py migrate {app name from show migrations} {00##_migration file.py}

إذا كنت تريد التراجع عن جميع عمليات التهجير ، فاستخدم zero كاسم التهجير:

python manage.py migrate app_name_here zero

احذف ملف التهجير. بمجرد أن يكون التهجير المطلوب في نماذجك ...

python manage.py makemigrations
python manage.py migrate

 

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

يمكنك عمل ذلك عن طريق التهجير الى ملف التهجير السابق للاخير

مثال اذا اعتبرنا وجود ملفان تهجير

  1. 0010_previous_migration

  2. 0011_migration_to_revert

يمكنك إذا تنفيذ الامر التالى

 migrate my_app 0010_previous_migration

ومن ثم بامكانك ان تمسح اخر ملف تهجير الغير مرغوب فيه 

0011_migration_to_revert

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

هنا حل آخر يغطي حالة ال use-case، عند استخدام RunPython. يمكنك الوصول إلى جدول ال ORM من خلال:

from django.db.migrations.recorder import MigrationRecorder
MigrationRecorder.Migration.objects.all()
MigrationRecorder.Migration.objects.latest('id')
MigrationRecorder.Migration.objects.latest('id').delete()

وبالتالي يمكنك الاستعلام عن الجداول وحذف ماتريده. وبهذه الطريقة يمكنك التعديل بالتفصيل. تحتاج أيضاً في عمليات ترحيل RynPython، إلى الاهتمام بالبيانات التي تمت إضافتها أو  تغييرها  أو إزالتها.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن