سؤال

نظرًا لأنني عادةً لا أقوم بالتصميم المسبق لنماذجي في مشاريع Django، ينتهي بي الأمر بتعديل النماذج كثيرًا وبالتالي حذف قاعدة بيانات الاختبار الخاصة بي في كل مرة (لأن "syncdb" لن يغير الجداول تلقائيًا نيابةً عنك).يوجد أدناه سير العمل الخاص بي وأود أن أسمع عن سير العمل الخاص بك.أي أفكار موضع ترحيب ..

  1. تعديل النموذج.
  2. حذف قاعدة بيانات الاختبار.(دائما قاعدة بيانات SQLite بسيطة بالنسبة لي.)
  3. قم بتشغيل "سينكدب".
  4. قم بإنشاء بعض بيانات الاختبار عبر الكود.
  5. انتقل إلى 1.

سؤال ثانوي في هذا ..في حالة أن سير عملك كما هو مذكور أعلاه، كيف يمكنك تنفيذ 4.خطوة؟هل تقوم بإنشاء بيانات الاختبار يدويًا أم أن هناك نقطة ربط مناسبة في تطبيقات Django حيث يمكنك إدخال رمز إنشاء بيانات الاختبار عند بدء تشغيل الخادم؟\

تيا.

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

المحلول

يمكن تنفيذ الخطوتين 2 و 3 في خطوة واحدة:

manage.py reset appname

تتم إدارة الخطوة 4 بسهولة أكبر، حسب فهمي، باستخدام تركيبات

نصائح أخرى

هذه وظيفة تركيبات جانغو.إنها ملائمة لأنها مستقلة عن قاعدة البيانات، كما أن أداة الاختبار (وmanage.py) تتمتع بدعم مدمج لها.

لاستخدامها:

  1. قم بإعداد بياناتك في تطبيقك (تسميها "Foo") باستخدام أداة الإدارة
  2. قم بإنشاء دليل لتركيبات في دليل تطبيق "FOO" الخاص بك
  3. يكتب: python manage.py dumpdata --indent=4 foo > foo/fixtures/foo.json

الآن، بعد مرحلة syncdb، ما عليك سوى كتابة:

 python manage.py loaddata foo.json

وسيتم إعادة إنشاء بياناتك.

إذا كنت تريدهم في حالة اختبار:

class FooTests(TestCase):
    fixtures = ['foo.json']

لاحظ أنه سيتعين عليك إعادة إنشاء تركيباتك أو تحديثها يدويًا إذا تغير مخططك بشكل جذري.

يمكنك قراءة المزيد حول التركيبات في مستندات Django لـ تحميل لاعبا اساسيا

وهنا ما نقوم به.

  1. تتم تسمية التطبيقات برقم إصدار المخطط. appa_2, appb_1, ، إلخ.

  2. التغييرات الطفيفة لا تغير الرقم.

  3. التغييرات الرئيسية تزيد العدد.يعمل سينكدب.ويمكن كتابة نص "ترحيل البيانات".

    def migrate_appa_2_to_3():
        for a in appa_2.SomeThing.objects.all():
            appa_3.AnotherThing.create( a.this, a.that )
            appa_3.NewThing.create( a.another, a.yetAnother )
        for b in ...
    

النقطة المهمة هي أن الإسقاط وإعادة الإنشاء ليس مناسبًا دائمًا.من المفيد أحيانًا نقل البيانات من النموذج القديم إلى النموذج الجديد دون إعادة البناء من الصفر.

الجنوب هو الأروع.

على الرغم من أن إعادة الضبط الجيدة تعمل بشكل أفضل عندما لا تكون البيانات مهمة.

http://south.aeracode.org/

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

يبحث Django فقط عن الملفات الموجودة في <app>/sql/<modelname>.sql وتشغيلها بعد إنشاء الجداول أثناء syncdb أو sqlreset.أستخدم SQL مخصصًا عندما أحتاج إلى القيام بشيء مثل ملء جداول Django الخاصة بي من جداول قاعدة بيانات أخرى غير Django.

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

يحرر:في الواقع، أنا أستخدم الجنوب الآن :-)

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