Django / دليل حلول تحريري
تشخيص الجداول المفقودة واختلاف حالة المخطط
حدد الإعداد وهوية القاعدة وربط النموذج وتاريخ الترحيل قبل اقتراح تغيير مخطط.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
يرفع الطلب خطأ جدول أو عمود بعد تعديل أو بيئة أو إصدار، وقد ينجح مكان آخر فيغري بترحيل أعمى. لا يحدد الخطأ وحده القاعدة وحالة المخطط المختارتين.
افهم الأسباب المحتملة
- قد يحمل إعدادا واتصالا آخر أو SQLite نسبية مختلفة أو ترحيلا غير مطبق أو كودا متقدما أو جدولا آخر، وقد تكون الاستعادة ناقصة.
- لا ينشئ تعريف Python جدوله وقد يزيد تعديل ترحيل مطبق اختلاف التاريخ.
1. احفظ الفشل وهوية الإصدار
سجل النوع والاسم الآمن والعملية والإصدار والأثر دون أسرار. ميز فشل الاتصال من الوصول لقاعدة تفتقد الكائن، والإذن سبب آخر. لا تصفر أو تزيف التاريخ أو تحذف SQLite للتجميل؛ احفظ الدليل لتفسير الطبقة المختلفة. فغياب جدول لا يعني بالضرورة أن إنشاءه في المكان الذي اتصلت به للتو هو القرار الصحيح، فقد تكون المشكلة أن العامل اختار بيئة أخرى منذ البداية.
2. تحقق من الإعداد وهوية القاعدة
افحص المصدر والاسم المستعار بسياق الفشل وقارن المحرك والبيئة وهوية محجوبة لا DATABASES كاملة. قد يختلف SQLite النسبي بمجلد العمل وقد يختار الموجه اتصالا آخر. لا يثبت غلاف محلي وجهة العامل. أبق التشخيص قرائيا حتى تعرف المورد والمالك دون استكشاف أسرار أو اتصال مجهول. ويجب إجراء المقارنة في سياق العامل الذي أخفق، لا اعتبار نجاح طرفية محلية بديلة إثباتا أنها تستخدم الإعداد والاسم المستعار وموضع الملف نفسها.
3. قارن النموذج والمخطط وتاريخ الترحيل
قارن اسم الجدول وملفات الإصدار واعتمادها ودليل المخطط والتاريخ المسموح. الكود والتاريخ والكائنات حقائق مختلفة. يوضح البرنامج بذاكرة جديدة أن التعريف لا ينشئ الجدول حتى تهيئة العينة، لا إصلاح إنتاجي أو بديل ترحيل. شخص العملية وتطبيقها السابق قبل نشر مراجع. وقد يختلف التاريخ المسجل عن الكائنات الفعلية حتى لو كان ملف النموذج صحيحا، لذلك يجب مقارنة الحقائق الثلاث ومعرفة ما طبق سابقا قبل تقرير عملية جديدة.
from django.conf import settings
settings.configure(
SECRET_KEY="synthetic-course-key",
USE_I18N=False, USE_TZ=True,
INSTALLED_APPS=[],
DATABASES={"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": ":memory:"}},
DEFAULT_AUTO_FIELD="django.db.models.AutoField",
ALLOWED_HOSTS=["testserver"],
)
import django
django.setup()
from django.db import connection, models
class Course(models.Model):
title = models.CharField(max_length=100)
class Meta:
app_label = "lab"
table = Course._meta.db_table
print(table in connection.introspection.table_names())
with connection.schema_editor() as editor:
editor.create_model(Course)
print(table in connection.introspection.table_names())
False
True
الفحص والإنشاء بقاعدة الذاكرة الخاصة فقط دون قاعدة تطبيق مهيأ.
4. اقترح إصلاحا متوافقا محدودا وتحقق
قد يصلح اختيار الإعداد والأثر أو الاستعادة أو ترحيل مفقود مراجع. قيّم الحفظ والكلفة وتوافق العمال والتراجع قبل الكتابة؛ لا تنشئ علامة مزيفة مخططا. بعد الاعتماد والتصحيح افحص الكائن والعمل والقيود والاختبارات بالوجهة المأذونة، واحفظ الأصل واشرح الاختلاف المحلول. ويجب أن يحدد سجل الإصلاح ما سيفقد وما يمكن التراجع عنه وكيف تحافظ النسخ العاملة على التوافق، لا أن يكتفي بإزالة رسالة الاستثناء في طلب واحد.
تحقق من نجاح الإصلاح
يستخدم العامل الإعداد والاسم المقصودين ويتطابق المخطط والتاريخ وتنجح العمليات، وتبقى البيانات والقيود والبيئات الأخرى. يثبت البرنامج المحلي عينته فقط.
امنع تكرار المشكلة
- أصدر التاريخ مع الكود وسجل الهوية بأمان واختبر الإعادة والنشر بعينات قابلة للاستغناء، ولا تعدل المطبق عشوائيا أو تعامل بيانات العمل عينة.