سؤال

لدي تطبيق Django. لدي ملفات. json التي تحتوي على بيانات الاختبار ، مع اختبارات الوحدة التي تستخدم البيانات لتأكيد أن التطبيق يعمل بشكل صحيح. أنا أيضا استخدام جنوب لترحيل قاعدة البيانات الخاصة بي.

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

ما هي أفضل طريقة لدفع المباريات الخاصة بي إلى الأمام أثناء ترحيل قاعدة البيانات الخاصة بي؟

هل كانت مفيدة؟

المحلول

ها هي العملية التي استخدمتها:

  1. راجع الرمز إلى المراجعة التي أنشأت المباراة في المقام الأول. علي سبيل المثال: svn up -r12345.

  2. تفريغ قاعدة البيانات ، ثم قم بإنشائها مع manage.py syncdb --noinput --migrate

  3. قم بتحميل التثبيت مع manage.py loaddata my_fixture.json

  4. لفة الكود إلى الأمام الآن ، مع svn up

  5. ترحيل قاعدة البيانات مع manage.py migrate

  6. تفريغ البيانات مع manage.py dumpdata --indent=2 myapp >my_fixture.json

لاحظ أنك بحاجة إلى توخي الحذر عند اختيار المراجعة السابقة للتراجع إلى. في حالتي ، كان لدي بعض الإصلاحات الحديثة التي يجب أن تكون في مكانها ، لذلك اضطررت فعليًا إلى اختيار الدلائل واختيارها للتراجع إلى مراجعات محددة. مملة ، ولكن أفضل من تحرير يدوية ملف JSON 9000.

أيضًا ، في الخطوة 6 ، تأكد من تفريغ المجموعة الصحيحة من التطبيقات.

في المستقبل ، عندما أكتب الترحيل ، يمكنني القيام بهذه الخطوات مرة أخرى للحفاظ على جميع المباريات محدثة.

نصائح أخرى

لماذا لا يمكنك ببساطة إنشاء طازجة .json ملف من ديسيبل الخاص بك. هذا ما أفعله عندما أحتاج إلى إنشاء لاعب جديد.

python manage.py dumpdata <your_app> auth > test_data.json

ما هي أفضل طريقة لدفع المباريات الخاصة بي إلى الأمام أثناء ترحيل قاعدة البيانات الخاصة بي؟

لقد فات الأوان.

أثناء ترحيل قاعدة البيانات الخاصة بك ، تحتاج إلى ذلك loaddata و dumpdata.

واحد يتوقف عن العمل ، لقد فات الأوان.

يتمثل الاحتياط المحتمل في كتابة برنامج نصي قصير لتحميل تركيبات JSON في الذاكرة ، ثم إنشاء كائنات قاعدة بيانات "يدويًا".

with open( "somefile.json", "r" ) as data:
    for obj in json.load( data ):
        if obj['model'] == 'someapp.somemodel':
            SomeNewModel.objects.create( 
                field = obj['fields']['element']
                ...
                )

مع وجود شيء على هذا المنوال ، قد تكون قادرًا على إنشاء قاعدة بيانات باستخدام مخططك الحالي وتركيبات Legacy.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top