سؤال

أنا تفكر في استخدام جانغو لمشروع أنا بدأت (لمعلوماتك يستند إلى مستعرض اللعبة) و واحدة من السمات يعجبني أكثر هو استخدام syncdb تلقائيا إنشاء جداول قاعدة البيانات استنادا إلى جانغو نماذج يمكنني تحديد (الميزة التي أنا لا يمكن أن يبدو للعثور على أي إطار آخر).كنت أفكر بالفعل هذا كان جيدا جدا ليكون صحيحا عندما رأيت هذا في الوثائق:

Syncdb لن يغير الجداول الموجودة

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

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

يبدو أن تغيير الجداول الموجودة سوف يتعين القيام به "باليد".

ما أود أن أعرف ما هي أفضل طريقة للقيام بذلك.حلين تتبادر إلى الذهن:

  • حيث أن الوثائق تشير إلى التغييرات يدويا في ديسيبل ؛
  • هل نسخة احتياطية من قاعدة البيانات, يمسح عليه, إنشاء الجداول مرة أخرى (مع syncdb منذ الآن إنشاء الجداول من الصفر) و استيراد البيانات احتياطيا (وهذا قد يستغرق وقتا طويلا إذا كانت قاعدة البيانات كبيرة)

أي أفكار ؟

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

المحلول

كما ورد في إجابات أخرى إلى نفس الموضوع ، تأكد من مشاهدة DjangoCon 2008 مخطط تطور الفريق على موقع يوتيوب.

أيضا اثنين من المشاريع الجديدة على الخريطة: Simplemigrations و المهاجرة.

نصائح أخرى

يدويا القيام SQL التغييرات تفريغ/تحميل كلاهما الخيارات ، ولكن قد تحتاج أيضا إلى التحقق من بعض من مخطط تطور حزم جانغو.الأكثر نضجا الخيارات جانغو-تطور و جنوب.

تحرير:و يا ها dmigrations.

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

التحديث:مخطط-الهجرات إطار يستند إلى الجنوب (و من تأليف أندرو غودوين ، المؤلف جنوب) في جانغو 1.7+.

واحد وسيلة جيدة للقيام بذلك هو عن طريق تركيبات خاصة initial_data جدول المباريات.

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

يمكنك إنشاء اساسيا من البيانات حاليا في DB باستخدام django-admin.py dumpdata.بشكل افتراضي البيانات في تنسيق JSON, ولكن الخيارات الأخرى مثل XML المتاحة.مكان جيد لتخزين المباريات هو fixtures فرعي من التطبيق الخاص بك الدلائل.

يمكنك تحميل fixure باستخدام django-admin.py loaddata ولكن الأهم من ذلك, إذا كان اساسيا له اسم مثل initial_data.json سيتم تحميلها تلقائيا عند القيام syncdb, وتوفير عناء استيراد بنفسك.

فائدة أخرى هي أنه عند تشغيل manage.py test لتشغيل وحدة الاختبارات المؤقتة اختبار قاعدة البيانات أيضا البيانات الأولية اساسيا تحميلها.

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

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

لقد تم استخدام جانغو-التطور.المحاذير ما يلي:

  • التلقائي الاقتراحات تم موحد فاسدة ؛ و
  • لها بصمة الدالة بإرجاع قيم مختلفة لنفس قاعدة البيانات على منصات مختلفة.

وقال أن أجد مخصص schema_evolution.py نهج مفيد.كمحاولة للتغلب على بصمات الأصابع المشكلة أقترح رمز مثل:

BEFORE = 'fv1:-436177719' # first fingerprint
BEFORE64 = 'fv1:-108578349625146375' # same, but on 64-bit Linux
AFTER = 'fv1:-2132605944' 
AFTER64 = 'fv1:-3559032165562222486'

fingerprints = [
    BEFORE, AFTER,
    BEFORE64, AFTER64,
    ]

CHANGESQL = """
    /* put your SQL code to make the changes here */
    """

evolutions = [
    ((BEFORE, AFTER), CHANGESQL),
    ((BEFORE64, AFTER64), CHANGESQL)
    ]

لو كان لدي المزيد من بصمات الأصابع و التغيرات كنت إعادة العامل ذلك.حتى ذلك الحين, مما يجعل نظافة ستكون سرقة التنمية وقت من أي شيء آخر.

تحرير: بالنظر إلى أن أنا يدويا بناء بلدي تغييرات على أي حال, سأحاول dmigrations في المرة القادمة.

جانغو-القيادة-امتداد هو جانغو المكتبة أن يعطي المزيد من الأوامر manage.py.واحد منهم هو sqldiff التي ينبغي أن تعطيك sql في حاجة إلى التحديث إلى نموذج جديد.ومع ذلك, على النحو الوارد جدا التجريبية'.

حتى الآن في شركتي علينا استخدام الأسلوب اليدوي.ما يعمل على نحو أفضل بالنسبة لك يعتمد كثيرا على تطوير نمط.

ونحن عموما لا الكثير من التغييرات المخطط في نظم الإنتاج نوعا ما رسمية rollouts من التنمية إلى خوادم الإنتاج.كلما كنا لفة من (10-20 مرات في السنة) نقوم بتعبئة مهرجان دبي السينمائي الدولي الحالية و القادمة إنتاج فرع مراجعة كافة التعليمات البرمجية مشيرا إلى ما يجب أن يتغير على خادم الإنتاج.التغييرات المطلوبة قد تكون إضافية تبعيات تغييرات على إعدادات ملف التغييرات إلى قاعدة البيانات.

هذا يعمل بشكل جيد جدا بالنسبة لنا.بعد كل الآلي مكانة الرؤية ولكن من الصعب بالنسبة لنا - ربما يمكننا إدارة الهجرة ولكن ما زلنا بحاجة إلى التعامل مع مكتبة إضافية, الخادم, مهما التبعيات.

جانغو 1.7 (حاليا في التنمية) ، إضافة دعم أصلي عن مخطط الهجرة manage.py migrate و manage.py makemigrations (migrate deprecates syncdb).

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