0Pricing
Python Academy · درس

تعريف النماذج

اربط الفئات بالجداول

تعريف النماذج درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

النماذج مرتبطة بالجداول

في ORM الخاصة بـ SQLAlchemy، يكون النموذج فئة Python مرتبطة بجدول في قاعدة البيانات. ويصبح كل مثيل صفًا.

ترث النماذج من فئة Base مشتركة.

from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
    pass
print('Base class ready')

__tablename__

يعيّن كل نموذج __tablename__ لتسمية جدوله. ويستخدم SQLAlchemy هذه القيمة عند إنشاء SQL.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
print(User.__tablename__)

الأعمدة باستخدام Mapped

تعرّف SQLAlchemy الحديثة الأعمدة باستخدام تلميحات الأنواع: Mapped[int] وmapped_column(). وتحدّد تلميحة النوع نوع Python، كما توضح نوع العمود.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    age: Mapped[int]
print('User has id, name, age')

المفتاح الأساسي

حدّدوا العمود بوصفه مفتاحًا أساسيًا باستخدام primary_key=True. وتزداد المفاتيح الأساسية الصحيحة تلقائيًا بشكل افتراضي.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class Product(Base):
    __tablename__ = 'products'
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
print('id is the primary key')

الأعمدة الاختيارية

استخدموا Mapped[str | None] أو Optional[str] للسماح بالقيم NULL. أما Mapped[str] العادي فيعني NOT NULL.

from typing import Optional
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    nickname: Mapped[Optional[str]]
print('nickname can be NULL')

القيم الافتراضية والتفرّد

تقبل mapped_column() خيارات مثل unique=True وdefault= لإضافة القيود والقيم البديلة.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    email: Mapped[str] = mapped_column(unique=True)
    active: Mapped[bool] = mapped_column(default=True)
print('email is unique, active defaults to True')

طول السلسلة النصية

بالنسبة إلى قواعد البيانات التي تحتاج إلى ذلك، حدّدوا طول السلسلة النصية باستخدام mapped_column(String(50)).

from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column(String(50))
print('name limited to 50 chars')

إنشاء المخطط

ينشئ Base.metadata.create_all(engine) جداول كل نموذج يرث من Base.

from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Schema created')

إنشاء المثيلات

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

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
u = User(name='Alice')
print(u.name)

إضافة __repr__

تسهّل __repr__ مخصّصة تصحيح الأخطاء من خلال عرض بيانات الكائن بوضوح.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    def __repr__(self):
        return 'User(name=' + self.name + ')'
print(repr(User(name='Bob')))

تبقى النماذج كائنات Python عادية

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

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    def greet(self):
        return 'Hi, ' + self.name
print(User(name='Carol').greet())

اختبار سريع

اختبروا مهاراتكم في تعريف النماذج.

مراجعة

تعلّمتم تعريف نماذج ORM.

  • ترث النماذج من DeclarativeBase وتعيّن __tablename__
  • تستخدم الأعمدة Mapped[type] وmapped_column()
  • تضيف primary_key وunique وdefault القيود
  • تنشئ create_all() الجداول

الأسئلة الشائعة

هل درس «تعريف النماذج» مجاني؟

نعم — نص درس «تعريف النماذج» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعريف النماذج»؟

اربط الفئات بالجداول تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تعريف النماذج»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. SQLAlchemy Core مقابل ORM
  2. تعريف النماذج
  3. الاستعلام باستخدام Session
  4. العلاقات وعمليات الربط
← العودة إلى Python Academy