ترحيل تركيبات Django؟
-
25-09-2019 - |
سؤال
لدي تطبيق Django. لدي ملفات. json التي تحتوي على بيانات الاختبار ، مع اختبارات الوحدة التي تستخدم البيانات لتأكيد أن التطبيق يعمل بشكل صحيح. أنا أيضا استخدام جنوب لترحيل قاعدة البيانات الخاصة بي.
بعد القيام ببعض عمليات ترحيل قاعدة البيانات ، تكون المباريات الخاصة بي قديمة ، لأن قاعدة البيانات قد تم ترحيلها ، وإضافة عمود قاعدة بيانات جديد ، على سبيل المثال ، ولا تحتوي بيانات التثبيت على هذا العمود ، حيث تم التقاطها قبل تغيير قاعدة البيانات.
ما هي أفضل طريقة لدفع المباريات الخاصة بي إلى الأمام أثناء ترحيل قاعدة البيانات الخاصة بي؟
المحلول
ها هي العملية التي استخدمتها:
راجع الرمز إلى المراجعة التي أنشأت المباراة في المقام الأول. علي سبيل المثال:
svn up -r12345
.تفريغ قاعدة البيانات ، ثم قم بإنشائها مع
manage.py syncdb --noinput --migrate
قم بتحميل التثبيت مع
manage.py loaddata my_fixture.json
لفة الكود إلى الأمام الآن ، مع
svn up
ترحيل قاعدة البيانات مع
manage.py migrate
تفريغ البيانات مع
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.