لذلك فمن السهل جدا الحصول على الخلط عندما
كنت تبحث لأول مرة في نماذج البيانات،
وعمليات الترحيل، وقاعدة البيانات نفسها.
ولذا أريد أن أخوض في هذا بمزيد من التفصيل.
وبالتالي فإن makemigrations هو ما يقرأ
ملفات models.py
ومن ثم يخلق ما يسمى عمليات الترحيل.
والشيء الرئيسي هو أن هذا يسترشد
بقائمة التطبيقات في settings.py.
حتى إذا قمت بعمل شيء جديد وجعل تطبيق جديد،
وقمت بتحرير ملف النماذج وحاولت تشغيل
makemigrations وأنها لا ترى
أي شيء مثل، ماذا فعلت للتو؟
حسنا، هل قمت بتحرير settings.py الخاص بك؟ لأن هناك
شيء يسمى التطبيقات المثبتة في settings.py الخاص بك.
الآن، عمليات الترحيل محمولة عبر قواعد البيانات.
وهذا يعني أن الترحيل
هو وصف منطقي لما
يجب أن تبدو عليه الجداول وأنها تطور.
ما يعنيه هو مثل الإصدار الأول
من هذا الجدول، من
أول models.py عندما تم تشغيل عمليات الترحيل لأول مرة، هو 001.
ثم إذا قمت بتغيير models.py
وتشغيل الترحيل مرة أخرى،
فإنه ينظر إلى التغييرات من
الترحيل 001 إلى models.py ثم 002،
ثم 002 ليس مثل مسح كل شيء والبدء من جديد،
انها مثل، «أوه انتظر، لقد أضفت للتو عمود واحد.
سأمضي قدما وأضيف هذا العمود». ولكن
لم يتم ذلك بطريقة سكل الفعلية.
لذا فإن عمليات الترحيل في حد ذاتها
تشبه بيثون وهي محمولة عبر قواعد البيانات،
مما يعني أنك قد
تستخدم على جهاز الكمبيوتر الخاص بك SQLite
، وفي الإنتاج قد تستخدم MySQL،
وعمليات الترحيل هي نفسها
لكل منهما لأنها تقول فقط،
«إليك ، وهنا الأنواع،
وهنا ما يفترض أن تكون عليه.»
الآن، على النقيض من ذلك مع أمر ترحيل.
يقرأ الأمر migrate
جميع عمليات الترحيل
ثم يعرف قاعدة البيانات التي يتحدث
إليها ويدير أوامر SQL لإنشاء
الجداول الضرورية و/أو تطوير الجداول الضرورية.
لذلك يبدو ويقول أوه، وهنا
الهجرة الأولى، وهنا الهجرة الثانية،
وهنا الهجرة الثالثة. سأقوم بعمل الجدول،
سأقوم بتغيير الجدول، سأقوم بتغيير الجدول،
سأقوم بتغيير الجدول، وفي
نهاية كل الترحيل،
ينتقل الترحيل من خلال
جميع عمليات الترحيل ثم
يحتوي على جدول قاعدة بيانات يعكس
إجمالي عمليات الترحيل،
والذي يعكس أيضًا أحدث ملف models.py.
لذا هو معقّد بعض الشيء.
لها علاقة مع قابلية قاعدة البيانات
وحقيقة أننا نريد فصل
الأجزاء المحمولة من هذا
من الأجزاء غير المحمولة لهذا.
حتى إذا نظرتم إلى makemigrations
وهنا عينات dj4e،
بلدي الاشياء عينة صغيرة،
وهناك الكثير من النماذج في هناك.
وإذا ألقيت نظرة على كل models.py،
ترى أنه لكل تطبيق
في مشروع عينات dj4e،
سترى ملف models.py وهذا هو
رمز بايثون، وهذا هو فئة، كتاب، بلاه، بلاه، بلاه، بلاه.
هذا هو المحمولة جدا وهذا هو كيف
نحن في رمز بيثون لدينا، في رمز جانغو لدينا،
انظر نموذج قاعدة البيانات.
وعندما تقوم بتشغيل makemigration،
التي تنتج هذه الملفات الهجرات
وهم فقط في مثل autos/migrations/001_initial.py، وما إلى ذلك
وهكذا ترى بعض تلك التي لدي هنا،
هناك في الواقع اثنين منهم.
لذلك جعلت نوع من أول واحد
ثم يجب أن أكون قد غيرت ملف النماذج،
ثم ركضت makemigrations مرة أخرى وسجلت
كيف تغير هذا النموذج
من الإصدار الأول من
ملف النماذج إلى الإصدار الثاني.
يمكنك إلقاء نظرة على هذه، ولكن لا تقم بتحريرها،
يمكنك التحقق منها في GitHub، ولكن لا تقم بتحريرها.
لكن ألقِ نظرة انهم تمثيل محمول جدا.
أنها نوع من تبدو مثل ملف models.py.
ليس من المفترض أن تقوم بتغييرها، من
المفترض أن تولد لهم
مع makemigrations. ومرة أخرى،
يمكن أن تذهب إلى GitHub.
الآن، يقرأ الترحيل بشكل أساسي
كل ملفات الترحيل هذه
وليس ملف واحد فقط، ولكن إذا كان
هناك تسلسل من ملفات الترحيل،
فإنه يطبقها كلها بالترتيب حسب الحاجة.
وإذا كانت قاعدة البيانات تحتوي
على الترحيل الأول والثاني
مطبق ولكن ليس الثالث، فإنها تعرف ذلك وتقول، «أنت تعرف ماذا، سأقوم فقط بتعديل قاعدة البيانات هذه
الموجودة بالفعل، والتي تعمل بالفعل،
ثم قم بإضافة عمود أو تغيير
عرض عمود أو مهما
كنت قد طلبت القيام به عن طريق تحرير models.py الخاص بك.»
لذلك عندما يتم الترحيل،
ثم ينتهي بك الأمر مع مجموعة كاملة من الجداول
في قاعدة البيانات الخاصة بك وأنها جميعا تستند إلى
اسم التطبيق واسم
النموذج داخل التطبيق.
وهكذا في مكان ما هنا هو bookone_book،
bookone_instance، و bookone_lang.
هؤلاء جميعهم جالسون هناك
وهكذا هذه هي كل الجداول. و
ألقينا نظرة على تلك الطاولات من قبل
ولكن هذا هو الترحيل الذي ينتقل
من جميع الهجرات الصغيرة المنتشرة عبر جميع
التطبيقات في هذا المشروع ومن ثم
يضع قاعدة بيانات معًا تحتوي على كل تلك الأشياء.
وأظل أقول أن الهجرات
هي كل شيء عن التطور،
لأنه إذا ألقيت نظرة هنا،
سترى جدولا صغيرا يسمى
django_migrations وما يفعله Django في
جدول django_migrations هذا يتذكر أي من
تلك الهجرات تم تطبيقها بالفعل على
قاعدة البيانات هذه حتى انها تمر من خلال عمليات الترحيل،
تقول، «أوه، وهنا
واحد لم يتم بعد في قاعدة البيانات هذه،
لذلك أنا قد حصلت على تعديل قاعدة البيانات قليلا فقط.»
لذلك فإنه يتذكر الهجرات التي تم القيام بها.
انها رائعة جدا
وفي هذه التطبيقات الصغيرة،
ونحن لا نحتاج دائما أن نكون ذكيين جدا في ذلك.
لذا في بعض الأحيان ما تريد القيام به هو
مثل، «أنا مرتبك،
سأقوم بإعادة تشغيل makemigrate»،
لأنك لا تقوم بتشغيل الإنتاج حقًا،
فأنت تقوم بذلك مرارًا وتكرارًا،
حتى تتمكن من إعادة تشغيل makemigrate.
والطريقة التي تفعل ذلك هي
ببساطة ببساطة حذف الملف،
يمكنك حذف هذه الملفات.
وأود أن حذف جميع تلك التي تبدأ مع الصفر.
إذا كنت ستقوم بإعادة تشغيل makemigrate،
فقم فقط بإعادة تشغيل makemigrations،
وحذف جميع تلك التي تبدأ بالصفر
وهذا في التطبيق
، وعمليات الترحيل، ثم التخلص من كل هذه،
وبعد ذلك يمكنك إعادة تشغيل
makemigrations
وسيقرأ ملف models.py الخاص بك،
ومن ثم سيفعل كل
الأشياء الضرورية لإعادة إنشاء ملف الترحيل.
صحيح، الآن هذه ليست قاعدة البيانات،
هذه هي التعليمات حول كيفية إنشاء قاعدة البيانات، حسنا؟
إذن هذه هي الطريقة التي تعيد تشغيل makemigrate.
يمكنك تشغيل الترحيل من الصفر،
وهذا هو في الواقع أسهل.
حتى تتمكن من مسح
عمليات الترحيل لتطبيق واحد وفعلت ذلك،
فقط محو bookone هنا،
وهذا ما فعلته وبدأت من جديد،
ولكن يمكنك مسح جميع عمليات الترحيل
وجميع قاعدة البيانات وكل شيء عن طريق
إزالة الملف في
هذه الحالة لأننا 're تشغيل SQLite،
مجرد مسح الملف
rm db.sqlite لأنه بعد الترحيل،
وهذا هو المكان الذي ينتهي كل شيء في هذا الملف.
إذن أنت تمسح هذا، لقد اختفى
الآن، ربما تكون قد أنشأت حساب مسؤول أو
شيء من هذا القبيل وسوف تقوم بمسح ذلك أيضا.
أنت ذاهب لمسح البيانات،
أنت ذاهب لمسح الجداول بها، كل شيء ذهب.
هذا شيء واحد أحب في SQLite،
يمكنك إزالة هذا الملف واحد وانها حرفيا ذهب كل شيء.
ثم يمكنك إعادة تشغيل python3 manage.py
ترحيل ويقرأ
جميع عمليات الترحيل ويجعلك
قاعدة بيانات فارغة لطيفة ونظيفة ومثالية.
حتى إذا كنت نوع من عالقة
وكنت لا تخاف من فقدان البيانات الخاصة بك،
والتي في معظم المبرمجين البداية لا
بأس للقضاء على شيء SQLite الخاص بك
وتشغيل الترحيل مرة أخرى.
فقط المضي قدما ومحاولة ذلك.
كما قلت، إذا قمت بإجراء حساب مشرف،
حسنا، كنت قد حصلت على القيام به مرة أخرى،
ولكن هذا هو أسوأ ما يمكنك القيام به،
على الأقل في هذه التطبيقات البداية.
حتى الآن بعد أن تحدثنا عن
كيفية التوصل إلى نموذج بيانات،
وكيفية ترميزه في Django models.py
، وكيفية القيام بعمليات الترحيل،
وكيفية ترحيل الأشياء وكيفية إنشاء قاعدة بيانات للخروج منه،
والآن سنتحدث عن نوع
رمز Python الذي يمكنك
تشغيله لتحديث هذه النماذج في قاعدة البيانات.
[ موسيقى]