ORM یا Object Relational Mapping روشی است که به شما اجازه میدهد با دیتابیس به صورت شیءگرایانه کار کنید. به جای نوشتن مستقیم کوئریهای SQL، شما با کلاسها، آبجکتها و متدها کار میکنید و ORM خودش آنها را به دستورات SQL تبدیل میکند.
در SQLAlchemy، ORM لایهای بالاتر نسبت به Core است و تمرکز آن روی مدلسازی دادهها با استفاده از کلاسهای Python است.
مزایای ORM:
- کاهش نیاز به نوشتن کوئریهای خام SQL
- مدیریت سادهتر مدلها و روابط
- قابلیت استفاده مجدد از مدلها در کل پروژه
- ایمنی بیشتر در برابر خطاهای سینتکسی SQL
- ادغام راحت با ساختارهای شیءگرای پایتون
معایب ORM:
- سرعت کمتر نسبت به SQL خام در برخی عملیاتهای سنگین
- مخفی کردن منطق SQL که ممکن است برای بهینهسازی لازم باشد
- نیاز به یادگیری قواعد ORM علاوه بر SQL
تفاوت ORM با ساختارهای اصلی برای Query (مثل SQLAlchemy Core یا SQL خام):
| ویژگی | ORM | SQL خام / SQLAlchemy Core |
|---|---|---|
| نحوه کار | کار با کلاسها و آبجکتها | نوشتن مستقیم کوئری یا استفاده از ساختارهای صریح SQL |
| سطح کنترل | کنترل کمتر روی دیتابیس | کنترل کامل روی کوئریها و عملیات |
| مناسب برای | پروژههای بزرگ با نیاز به مدلسازی و نگهداری راحت | کوئریهای بسیار پیچیده یا عملکرد محور |
| سرعت | معمولاً کندتر | سریعتر و بهینهتر |
| یادگیری | نیاز به یادگیری الگوهای ORM | آشنایی با SQL کافی است |
نمونه مقایسه:
ساخت یک ردیف جدید با ORM:
user = User(name="Ali", age=28)
session.add(user)
session.commit()
همان عملیات با SQL خام:
INSERT INTO users (name, age) VALUES ('Ali', 28);