Amer Abdallah نشر 31 أغسطس 2021 أرسل تقرير نشر 31 أغسطس 2021 هل هناك طريقة لإظهار جمل SQL التي يقوم جانغو Django بتشغيله أثناء تنفيذ استعلام؟ أي أني أريد الحصول على جملة raw SQL التي سيتم الإستعلام عنها. 2 اقتباس
0 سامح أشرف نشر 31 أغسطس 2021 أرسل تقرير نشر 31 أغسطس 2021 يوفر Django الصنف connection الذي يسمح لك بمعرفة جمل SQL التي يتم تنفيذها، كالتالي: >>> from django.db import connection >>> connection.queries [{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls', 'time': '0.002'}] يعرض الكود السابق جمل SQL التي تم تنفيذها مع الوقت الذي إستغرقه تنفيذ كل جملة. لاحظ أن connection.queries متاحة فقط في حالة تم ضبط إعدادات Django وتفعيل وضع التطوير DEBUG=True إن كان المشروع يعمل على أكثر من قاعدة بيانات، فيمكنك تحديد قاعدة البيانات بالطريقة التالية: >>> from django.db import connections >>> connections['DATABASE_NAME'].queries في حالة أردت حذف سجل جمل SQL هذا فيمكنك أن تستعمل الدالة reset_queries: from django.db import reset_queries reset_queries() كما أن Querysets لديها الخاصية query التي تمكنك من عرض جملة SQL قبل تنفيذها، كالتالي: print(User.objects.filter(role="admin").query) لاحظ أيضًا أن جمل SQL الناتجة عن هذه العملية قد لا تكون صحيح مع جميع أنواع قواعد البيانات، حيث يقوم Django بإرسال جملة SQL مع القيم بشكل منفصل، وهذا الأمر تم توضيحه في توثيق Django: اقتباس "Django never actually interpolates the parameters: it sends the query and the parameters separately to the database adapter, which performs the appropriate operations." اقتباس
0 Ali Haidar Ahmad نشر 31 أغسطس 2021 أرسل تقرير نشر 31 أغسطس 2021 إجابة سامح رائعة، إليك طريقة أخرى بسيطة وسهلة: Q = Query.objects.values('v1','v2','vn') print(Q.query) حيث أنه تم تضمين الاستعلام فعلياً في واجهة برمجة تطبيقات النماذج. وكحل آخر فإن امتدادات Django لها أمر shell_plus مع معامل print-sql : ./manage.py shell_plus --print-sql في django-shell ستتم طباعة جميع الاستعلامات المنفذة، على سبيل المثال: User.objects.get(pk=1) SELECT "auth_user"."id", "auth_user"."password", .. .. "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."id" = 1 Execution time: 0.002466s [Database: default] <User: username> بالنسبة لهذه الطريقة إن لم تعمل معك فيجب أن تقوم بضبط DEBUG = True في ملف settings.py. اقتباس
السؤال
Amer Abdallah
هل هناك طريقة لإظهار جمل SQL التي يقوم جانغو Django بتشغيله أثناء تنفيذ استعلام؟
أي أني أريد الحصول على جملة raw SQL التي سيتم الإستعلام عنها.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.