0Pricing
Python Academy · درس

SQLAlchemy Core مقابل ORM

افهم الطبقتين

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

ما SQLAlchemy؟

تُعدّ SQLAlchemy أشهر حزمة أدوات في Python للعمل مع قواعد البيانات العلائقية. وتوفّر طبقتين: Core وORM.

تثبّتونها باستخدام pip install sqlalchemy.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
print('Engine:', engine)

المحرك

تبدأ كلتا الطبقتين باستخدام Engine، الذي تنشئه create_engine(). ويدير هذا المحرك تجمّع الاتصالات، ويعرف كيفية التواصل مع قاعدة البيانات المحددة عبر عنوان URL.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///app.db')
print('Dialect:', engine.dialect.name)

الطبقتان

إن Core حزمة أدوات لتعبيرات SQL؛ إذ تنشئون استعلامات تقابل SQL بشكل وثيق.

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

# Core: think in tables and SQL expressions
# ORM: think in Python classes and objects
print('Core = SQL toolkit, ORM = object mapping')

Core: تعريف جدول

تصفون الجداول في Core باستخدام الكائنين Table وMetaData بشكل صريح.

from sqlalchemy import MetaData, Table, Column, Integer, String
metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String))
print('Table defined:', users.name)

Core: إنشاء استعلام

ينشئ Core الاستعلامات باستخدام تعبيرات Python مثل select() التي تُترجم مباشرةً إلى SQL.

from sqlalchemy import MetaData, Table, Column, Integer, String, select
metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String))
stmt = select(users).where(users.c.name == 'Alice')
print(stmt)

ORM: فئة مرتبطة

تمثّل فئة Python جدولًا في ORM. ويرتبط كل سِمَة بعمود. وتستعلمون عن الكائنات وتحفظونها بدلًا من الصفوف الخام.

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]
print('Mapped class:', User.__tablename__)

متى تستخدمون Core؟

يلائم Core الحالات التي تريدون فيها تحكمًا دقيقًا في SQL الفعلي، أو تنفيذ عمليات بيانات مجمّعة، أو تشغيل استعلامات تقارير معقدة تضيف فيها الكائنات عبئًا زائدًا.

# Core is great for:
# - bulk inserts/updates
# - complex analytical queries
# - close control over generated SQL
print('Core: control and performance')

متى تستخدمون ORM؟

تلائم ORM شيفرة التطبيقات المعتادة: إذ تمثّلون كيانات العمل على شكل فئات، وتحصلون على تتبّع التغييرات، وتكتبون شيفرة تمهيدية أقل.

# ORM is great for:
# - application domain models
# - automatic change tracking
# - relationships between objects
print('ORM: productivity and clarity')

تشترك الطبقتان في المحرك

نظرًا إلى أن ORM مبنية على Core، فإن كلتيهما تستخدمان Engine نفسه وتجمّع الاتصالات نفسه. ويمكنكم حتى مزجهما في تطبيق واحد.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
# Core uses engine.connect()
# ORM uses a Session bound to the same engine
print('One engine powers both layers')

إنشاء الجداول

باستخدام ORM، يصدر Base.metadata.create_all(engine) عبارات CREATE TABLE لجميع الفئات المرتبطة.

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)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Tables created')

اختيار طبقة

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

# Rule of thumb:
# Start with the ORM. Use Core where you need raw power.
print('Default ORM, escape to Core when needed')

اختبار سريع

اختبروا مدى فهمكم للطبقتين.

مراجعة

تعرّفتم إلى بنية SQLAlchemy.

  • يشغّل Engine كل شيء من خلال create_engine()
  • إن Core حزمة أدوات لتعبيرات SQL تمنحكم التحكم والأداء
  • تربط ORM الفئات بالجداول لتسهيل كتابة شيفرة التطبيقات
  • تشترك الطبقتان في المحرك نفسه ويمكن مزجهما

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

هل درس «SQLAlchemy Core مقابل ORM» مجاني؟

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

ماذا ستتعلم في «SQLAlchemy Core مقابل ORM»؟

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

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

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

كم من الوقت يستغرق درس «SQLAlchemy Core مقابل ORM»؟

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

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

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

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

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