اذهب إلى المحتوى

السؤال

نشر

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

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

Recommended Posts

  • 0
نشر

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

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

  1. 0010_previous_migration

  2. 0011_migration_to_revert

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

 migrate my_app 0010_previous_migration

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

0011_migration_to_revert

  • 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

 

  • 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، إلى الاهتمام بالبيانات التي تمت إضافتها أو  تغييرها  أو إزالتها.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...