كل ما تحتاج لمعرفته حول خرائط بايثون وكائنات الارتباط

كل ما تحتاج لمعرفته حول خرائط بايثون وكائنات الارتباط

ربما تكون قد سمعت عن رسم الخرائط العلائقية للكائنات (ORM). ربما تكون قد استخدمت واحدة ، ولكن ما هي بالضبط؟ وكيف تستخدمها في بايثون؟





إليك كل ما تحتاج لمعرفته حول ORMs و Python.





ما هو ال ORM؟

رسم الخرائط العلائقية للكائن (ORM) هو أسلوب برمجة يستخدم للوصول إلى قاعدة بيانات. يعرض قاعدة البيانات الخاصة بك إلى سلسلة من الكائنات. لست مضطرًا إلى كتابة أوامر SQL لإدراج البيانات أو استردادها ، فأنت تستخدم سلسلة من السمات والأساليب المرتبطة بالكائنات.





قد يبدو الأمر معقدًا وغير ضروري ، ولكن يمكن أن يوفر لك الكثير من الوقت ، ويساعد في التحكم في الوصول إلى قاعدة البيانات الخاصة بك.

هنا مثال. قل أنه كلما أدخلت كلمة مرور في قاعدة البيانات الخاصة بك ، فأنت تريد تجزئتها ، كما هو موضح في أمان كلمة مرور موقع الويب. هذه ليست مشكلة في حالات الاستخدام البسيطة - فأنت تقوم بالحساب قبل الإدراج. ولكن ماذا لو احتجت إلى إدخال سجل في العديد من الأماكن في الكود؟ ماذا لو قام مبرمج آخر بإدراج جدولك ولا تعرف شيئًا عنه؟



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

هذا أيضا بمثابة 'مصدر واحد للحقيقة'. إذا كنت تريد تغيير حساب مخصص ، فما عليك سوى تغييره في مكان واحد ، وليس عدة حسابات. من الممكن تنفيذ العديد من هذه المبادئ باستخدام البرمجة الشيئية (OOP) في بايثون ، لكن ORMs تعمل جنبًا إلى جنب مع مبادئ OOP للتحكم في الوصول إلى قاعدة البيانات.





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

ORMs في Python باستخدام SQLAlchemy

مثل العديد من المهام في Python ، من الأسرع والأسهل استيراد وحدة من كتابة الوحدة الخاصة بك. بالطبع ، من الممكن أن تكتب ORM الخاص بك ، ولكن لماذا تعيد اختراع العجلة؟





جميع الأمثلة التالية تستخدم SQLAlchemy ، وهي لغة Python ORM شائعة ، ولكن يتم تطبيق العديد من المبادئ بغض النظر عن التطبيق.

إعداد Python لـ SQLAlchemy

قبل الدخول مباشرة ، ستحتاج إلى إعداد جهازك لتطوير Python باستخدام SQLAlchemy.

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

قبل البرمجة ، يجب عليك إعداد بيئة Python ، والتي ستمنع المشاكل مع حزم Python الأخرى المستوردة.

تأكد من أن لديك PIP ، مدير حزم Python مثبت ، والذي يأتي مع أحدث إصدارات Python.

بمجرد أن تصبح جاهزًا للانطلاق ، يمكنك البدء بتجهيز SQLAlchemy. من داخل بيئة Python الخاصة بك في سطر الأوامر ، قم بتثبيت SQLAlchemy بامتداد تثبيت نقطة أمر:

pip install SQLAlchemy-1.2.9

ال 1.2.9 هو رقم الإصدار. يمكنك ترك هذا الخيار للحصول على أحدث حزمة ، ولكن من الجيد أن تكون محددًا. أنت لا تعرف متى قد يكسر الإصدار الجديد شفرتك الحالية.

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

نماذج في SQLAlchemy

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

افتح محرر النصوص المفضل لديك أو IDE ، وأنشئ ملفًا جديدًا يسمى test.py . أدخل رمز البدء هذا ، واحفظ الملف ، وقم بتشغيله:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('sqlite://') # Create the database in memory
Base.metadata.create_all(engine) # Create all the tables in the database

هذا الرمز يفعل عدة أشياء. تعتبر عمليات الاستيراد ضرورية حتى تفهم Python مكان العثور على وحدات SQLAlchemy التي تحتاجها. ستستخدم نماذجك ملف تعريف_القاعدة لاحقًا ، ويقوم بتهيئة أي نماذج جديدة للعمل كما هو متوقع.

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

وأخيرا، فإن create_all طريقة إنشاء جميع الجداول المحددة في الأوضاع الخاصة بك في قاعدة البيانات الخاصة بك. نظرًا لأنك لم تحدد أي نماذج بعد ، فلن يحدث شيء. انطلق وقم بتشغيل هذا الرمز ، للتأكد من عدم وجود أي مشاكل أو أخطاء إملائية.

لنصنع نموذجًا. أضف استيرادًا آخر إلى أعلى الملف:

from sqlalchemy import Column, Integer, String

هذا يستورد ملف عمودي و عدد صحيح ، و سلسلة وحدات من SQLAlchemy. وهي تحدد كيفية عمل جداول قاعدة البيانات والحقول والأعمدة وأنواع البيانات.

تحت تعريف_القاعدة ، قم بإنشاء فئة النموذج الخاص بك:

class Cars(Base):
__tablename__ = 'cars'
id = Column(Integer, primary_key=True)
make = Column(String(50), nullable=False)
color = Column(String(50), nullable=False)

يستخدم هذا المثال البسيط السيارات ، ولكن قد تحتوي جداولك على أي بيانات.

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

أخيرًا ، يتم تعريف كل عمود على أنه متغير بيثون داخل الفصل. يتم استخدام أنواع بيانات مختلفة ، و المفتاح الأساسي تخبر السمة SQLAlchemy بإنشاء ملف هوية شخصية العمود كمفتاح أساسي.

تابع وقم بإضافة استيراد أخير ، هذه المرة لملف مفتاح غريب وحدة. أضف هذا إلى جانب ملف عمودي يستورد:

from sqlalchemy import Column, ForeignKey, Integer, String

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

class CarOwners(Base):
__tablename__ = 'carowners'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
age = Column(Integer, nullable=False)
car_id = Column(Integer, ForeignKey('cars.id'))
car = relationship(Cars)

هناك العديد من السمات الجديدة المقدمة هنا. ال car_id يتم تعريف الحقل على أنه مفتاح خارجي. إنه مرتبط بـ هوية شخصية في ال سيارات طاولة. لاحظ كيف يتم استخدام اسم الجدول بالأحرف الصغيرة ، مثبتًا في اسم الفئة الكبيرة.

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

إذا قمت بتشغيل هذا الرمز الآن ، فسترى أنه لم يحدث شيء. هذا لأنك لم تأمره بفعل أي شيء ملحوظ حتى الآن.

الكائنات في SQLAlchemy

الآن بعد أن تم إنشاء النماذج الخاصة بك ، يمكنك البدء في الوصول إلى الكائنات وقراءة البيانات وكتابتها. من الجيد وضع منطقك في فئته وملفه الخاصين ، ولكن في الوقت الحالي ، يمكن أن يظل بجانب النماذج.

كتابة البيانات

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

قد تكون معتادًا على الكتابة إدراج جمل في SQL. يقوم SQLAlchemy بمعالجة هذا نيابة عنك. فيما يلي كيفية إدراج صف واحد في ملف سيارات نموذج. ابدأ باستيراد جديد لـ صانع الجلسة :

from sqlalchemy.orm import sessionmaker

هذا مطلوب لإنشاء ملف حصة و DBSession الكائنات التي تُستخدم لقراءة البيانات وكتابتها:

DBSession = sessionmaker(bind=engine)
session = DBSession()

الآن ضع هذا تحت الخاص بك create_all بيان:

car1 = Cars(
make='Ford',
color='silver'
)
session.add(car1)
session.commit()

دعونا نكسر هذا الرمز. المتغير سيارة 1 يتم تعريفه ككائن يعتمد على سيارات نموذج. يتم تعيين صنعها ولونها كمعلمات. هذا مثل قول 'اجعلني سيارة ، لكن لا تكتبها في قاعدة البيانات بعد'. هذه السيارة موجودة في الذاكرة لكنها تنتظر كتابتها.

أضف السيارة إلى الجلسة مع جلسة ، ثم اكتبه إلى قاعدة البيانات باستخدام session.commit .

الآن دعنا نضيف مالكًا:

owner1 = CarOwners(
name='Joe',
age='99',
car_id=(car1.id)
)
session.add(owner1)
session.commit()

هذا الرمز مطابق تقريبًا للإدراج السابق لـ سيارات نموذج. الاختلاف الرئيسي هنا هو ذلك car_id هو مفتاح خارجي لذلك يحتاج إلى معرف صف موجود في الجدول الآخر. يتم الوصول إلى هذا من خلال car1.id خاصية.

لا يتعين عليك الاستعلام عن قاعدة البيانات أو إرجاع أي معرفات ، لأن SQLAlchemy تتولى هذا الأمر نيابةً عنك (طالما أنك تلتزم بالبيانات أولاً).

قراءة البيانات

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

result = session.query(Cars).all()

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

result = session.query(Cars).first()

بمجرد الاستعلام عن النموذج وتخزين النتائج التي تم إرجاعها في متغير ، يمكنك الوصول إلى البيانات من خلال الكائن:

print(result[0].color)

هذا يطبع اللون 'الفضي' ، حيث أن هذا السجل هو الصف الأول. يمكنك إجراء حلقة فوق الكائن الناتج إذا كنت تريد ذلك.

أثناء تحديد العلاقة في النموذج الخاص بك ، من الممكن الوصول إلى البيانات في الجداول المرتبطة دون تحديد صلة:

result = session.query(CarOwners).all()
print(result[0].name)
print(result[0].car.color)

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

ما الذي لا يعجبك في ORMs؟

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

  • يجب عليك كتابة النموذج الخاص بك قبل تشغيل أي استعلامات.
  • إنه بناء جملة جديد آخر يجب تعلمه.
  • قد يكون معقدًا جدًا للاحتياجات البسيطة.
  • يجب أن يكون لديك تصميم جيد لقاعدة البيانات لتبدأ به.

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

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

يشارك يشارك سقسقة بريد الالكتروني هل يجب عليك الترقية إلى Windows 11 على الفور؟

يتوفر Windows 11 قريبًا ، ولكن هل يجب عليك التحديث في أقرب وقت ممكن أم الانتظار بضعة أسابيع؟ هيا نكتشف.

اقرأ التالي
مواضيع ذات صلة
  • برمجة
  • بايثون
  • SQL
  • دروس الترميز
نبذة عن الكاتب جو كوبورن(تم نشر 136 مقالاً)

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

أفضل طريقة لبيع الكتب المصورة
المزيد من Joe Coburn

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك