استخدام Django ORM للاستعلام عن قاعدة البيانات

يعد Django ORM (Object-Relational Mapper) أداة قوية تسمح لك بالتفاعل مع قاعدة البيانات الخاصة بك بطريقة بايثون. حيث يسمح لك بإنشاء سجلات قاعدة البيانات وقراءتها وتحديثها وحذفها دون كتابة استعلامات SQL أولية.

كما يوفر Django ORM مجموعة من الأساليب للاستعلام عن البيانات في قاعدة البيانات. تُستخدم هذه الأساليب لإنشاء QuerySet، وهو كائن يمثل مجموعة من السجلات في قاعدة البيانات.

و من بين إحدى الفوائد الرئيسية لـ Django ORM هي قدرته على استخلاص الاختلافات بين أنظمة قواعد البيانات المختلفة. هذا يعني أنه يمكنك استخدام نفس الكود للاستعلام عن قاعدة بيانات SQLite، أو قاعدة بيانات MySQL، أو قاعدة بيانات PostgreSQL، دون الحاجة إلى القلق بشأن الاختلافات الأساسية بين هذه الأنظمة.

و لاستخدام Django ORM، ستحتاج إلى تحديد نماذج قاعدة البيانات الخاصة بك في مشروع Django. حيث تحدد هذه النماذج بنية جداول قاعدة البيانات والعلاقات بينها.

بمجرد تحديد النماذج الخاصة بك، يمكنك استخدام ORM للاستعلام عن قاعدة البيانات وإنشاء سجلات جديدة وتحديث السجلات الموجودة وحذف السجلات حسب الحاجة. إنها أداة قوية يمكنها أن تجعل العمل مع قاعدة البيانات الخاصة بك في مشاريع Django أسهل.

الاتصال بقاعدة البيانات في جانغو

لاستخدام Django ORM، ستحتاج إلى إعداد قاعدة بيانات وتوصيلها بمشروع Django. و يتم ذلك من خلال استخدام محرك قاعدة البيانات، وهو مكون قابل للتوصيل يسمح لـ Django بدعم أنظمة قواعد البيانات المختلفة.

للاتصال بقاعدة بيانات في Django، ستحتاج إلى تحديد محرك قاعدة البيانات الذي تريد استخدامه وتوفير تفاصيل الاتصال الضرورية في ملف إعدادات Django. فيما يلي مثال لكيفية القيام بذلك لقاعدة بيانات SQLite:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'mydatabase',
    }
}

بالنسبة لأنظمة قواعد البيانات الأخرى، ستحتاج إلى تحديد المحرك المناسب وتوفير تفاصيل الاتصال اللازمة. على سبيل المثال، للاتصال بقاعدة بيانات MySQL، يمكنك استخدام الإعدادات التالية:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '',
    }
}

بمجرد تحديد إعدادات قاعدة البيانات الخاصة بك، يمكنك استخدام Django ORM للتفاعل مع قاعدة البيانات الخاصة بك.

إنشاء النماذج وترحيل قاعدة البيانات

تُستخدم النماذج لتحديد بنية جداول قاعدة البيانات و العلاقات بينها. و لاستخدام Django ORM للاستعلام عن قاعدة البيانات، ستحتاج إلى إنشاء نماذجك في مشروع Django.

لغنشاء نموذج في جانغو، عليك بإنشاء فئة فرعية من django.db.models.Model وتحديد سلسلة من متغيرات الفئة لتمثيل حقول النموذج الخاص بك. و فيما يلي مثال لنموذج بسيط يمثل شخص يحمل الاسم الأول واسم العائلة:

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

بمجرد إنشاء النماذج، ستحتاج إلى ترحيل قاعدة البيانات لإنشاء الجداول والحقول الضرورية. في Django، يتم ذلك باستخدام أوامر makemigrations و migrate.

لإنشاء عمليات ترحيل قاعدة البيانات، قم بتشغيل الأمر التالي:

python manage.py makemigrations

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

python manage.py migrate

سيؤدي هذا إلى إنشاء الجداول والحقول الضرورية في قاعدة بياناتك، وستكون قادرًا على استخدام Django ORM للاستعلام عن البيانات الموجودة في هذه الجداول ومعالجتها.

الاستعلام عن قاعدة البيانات باستخدام Django ORM

بمجرد إنشاء النماذج وترحيل قاعدة البيانات، يمكنك استخدام Django ORM للاستعلام عن قاعدة البيانات. يوفر Django ORM مجموعة من الأساليب والوظائف التي تسمح لك باسترداد البيانات ومعالجتها في قاعدة البيانات.

لإجراء استعلام بسيط، يمكنك استخدام التابع Model.objects.all()، والذي سيُرجع مجموعة استعلام تحتوي على كافة السجلات الموجودة في جدول النموذج. على سبيل المثال، لاسترداد جميع الأشخاص في نموذج الشخص المحدد في المثال السابق، يمكنك استخدام التعليمة البرمجية التالية:

people = Person.objects.all()

سيؤدي هذا إلى إرجاع مجموعة استعلام تحتوي على كافة السجلات الموجودة في جدول Person. يمكنك بعد ذلك التكرار عبر مجموعة الاستعلام للوصول إلى السجلات الفردية:

for person in people:
    print(person.first_name, person.last_name)

لاسترداد سجل معين، يمكنك استخدام التابع Model.objects.get()، والذي سيعيد كائنًا واحدًا مطابقًا للمعايير المحددة. على سبيل المثال، لاسترداد الشخص الذي يحمل الاسم الأول “Kader”، يمكنك استخدام الكود التالي:

person = Person.objects.get(first_name='Kader')

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

استخدام عوامل التصفية لتحسين نتائج الاستعلام

يوفر Django ORM مجموعة من الأساليب لتصفية نتائج الاستعلام الخاص بك لاسترداد السجلات التي تهمك فقط. وتسمح لك هذه الأساليب بتحديد الشروط التي يجب أن تستوفيها السجلات التي تم إرجاعها.

لتصفية نتائج الاستعلام، يمكنك استخدام التابع Model.objects.filter()، الذي يرجع مجموعة استعلام تحتوي فقط على السجلات التي تطابق المعايير المحددة. على سبيل المثال، لاسترداد جميع الأشخاص في نموذج  Person بالاسم الأخير “Mohamed”، يمكنك استخدام الكود التالي:

people = Person.objects.filter(last_name='Mohamed')

يمكنك أيضًا ربط عوامل تصفية متعددة معًا لإنشاء استعلامات أكثر تعقيدًا. على سبيل المثال، لاسترداد كافة الأشخاص في نموذج Person بالاسم الأول “Kader” والاسم الأخير “Mohamed”، يمكنك استخدام الكود التالي:

people = Person.objects.filter(first_name='Kader').filter(last_name='Mohamed')

يمكنك أيضًا استخدام التابع exclude() لاسترداد السجلات التي لا تطابق المعايير المحددة. على سبيل المثال، لاسترداد جميع الأشخاص في نموذج Person باسم أخير غير “Mohamed”، يمكنك استخدام الكود التالي:

people = Person.objects.exclude(last_name='Mohamed')

بشكل عام، يوفر كل من  filter() و  exclude() طريقة فعالة لتحسين نتائج الاستعلام واسترداد السجلات التي تهمك فقط.

طلب نتائج الاستعلام في جانغو

يتيح لك Django ORM طلب نتائج الاستعلام باستخدام التابع order_by(). بيث يكون اسم الحقل وسيط ويقوم بإرجاع مجموعة استعلام تحتوي على السجلات التي تم فرزها بترتيب تصاعدي حسب هذا الحقل.

على سبيل المثال، و لاسترداد جميع الأشخاص في نموذج  Person مرتبة حسب اسم العائلة، يمكنك استخدام الكود التالي:

people = Person.objects.all().order_by('last_name')

يمكنك أيضًا تحديد صيغة “-fieldname” لفرز النتائج بترتيب تنازلي. على سبيل المثال، لاسترداد جميع الأشخاص في نموذج  Person مرتبة حسب  last_name بترتيب تنازلي، يمكنك استخدام الكود التالي:

people = Person.objects.all().order_by('-last_name')

يمكنك أيضًا استخدام التابع order_by() للفرز حسب حقول متعددة. على سبيل المثال، لاسترداد كافة الأشخاص في نموذج  Person مرتبة أولاً حسب  last_name ثم حسبfirst_name ، يمكنك استخدام الكود التالي:

people = Person.objects.all().order_by('last_name', 'first_name')

تحديث وحذف السجلات باستخدام Django ORM

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

لتحديث سجل، يمكنك استرداد الكائن الذي تريد تحديثه، وتعديل سماته، ثم حفظه مرة أخرى في قاعدة البيانات. على سبيل المثال، لتحديث  first_name لشخص يحمل الاسم الأول “Kader” إلى “Ahmed”، يمكنك استخدام الكود التالي:

person = Person.objects.get(first_name='Kader')
person.first_name = 'Ahmed'
person.save()

, لحذف سجل، يمكنك استخدام التابع Model.objects.filter().delete() لحذف كافة السجلات التي تطابق المعايير المحددة. على سبيل المثال، لحذف جميع الأشخاص في نموذج  Person بالاسم الأخير “Mohamed”، يمكنك استخدام الكود التالي:

Person.objects.filter(last_name='Mohamed').delete()

تقنيات الاستعلام المتقدمة مع كائنات Q

يوفر Django ORM أداة قوية تسمى كائنات Q والتي تتيح لك إنشاء استعلامات معقدة باستخدام عوامل تشغيل منطقية مثل AND وOR وNOT.

لإنشاء كائن Q، يمكنك استخدام الدالة Q() وتحديد اسم الحقل وعامل المقارنة والقيمة التي تريد المقارنة بها. على سبيل المثال، لإنشاء كائن Q يمثل الشرط “first_name يساوي ‘Kader'”، يمكنك استخدام الكود التالي:

from django.db.models import Q

q = Q(first_name='Kader')

يمكنك بعد ذلك استخدام & و and | أو عوامل التشغيل لدمج كائنات Q متعددة. على سبيل المثال، لإنشاء كائن Q يمثل الشرط “first_name يساوي ‘Kader’ و last_name يساوي ‘Mohamed'”، يمكنك استخدام الكود التالي:

q = Q(first_name='John') & Q(last_name='Smith')

لإلغاء كائن Q، يمكنك استخدام عامل التشغيل ~. على سبيل المثال، لإنشاء كائن Q يمثل الشرط “first_nam لا يساوي ‘Kader'”، يمكنك استخدام الكود التالي:

q = ~Q(first_name='John')

يمكنك بعد ذلك استخدام كائن Q في استعلاماتك عن طريق تمريره إلى الأسلوب Model.objects.filter() . على سبيل المثال، لاسترداد كافة الأشخاص في نموذج  Person بالاسم الأول “Kader” والاسم الأخير “Mohamed”، يمكنك استخدام الكود التالي:

people = Person.objects.filter(q)

توفر كائنات Q طريقة قوية لإنشاء استعلامات معقدة في جانغو.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading

Scroll to Top