إضافة عمود محسوب إلى جدول SQLModel باستخدام Python
في مجال تطوير البرمجيات، تتطلب الكثير من التطبيقات التعامل مع قواعد البيانات بفعالية وسهولة. واحدة من الأدوات القوية التي تساعد المطورين في هذا السياق هي مكتبة SQLModel المستخدمة مع FastAPI. في هذا المقال، سنتناول كيفية إضافة عمود محسوب إلى جدول في SQLModel، مما يساعد في تسهيل الوصول إلى البيانات المحسوبة مباشرة من قاعدة البيانات.
ما هو العمود المحسوب؟
العمود المحسوب هو عمود يتم حساب قيمته استنادًا إلى البيانات الموجودة في قاعدة البيانات، بدلاً من أن يتم تخزينه مباشرة. يُستخدم بشكل شائع في الاستعلامات لإجراء العمليات الحسابية مثل الجمع أو المتوسطات أو الإحصائيات. في سياق عملنا مع SQLModel، يمكننا استخدام العمود المحسوب لتسهيل الحصول على معلومات معينة تساهم في تحسين الأداء وسرعة الاستجابة للتطبيقات.
كيفية إضافة عمود محسوب في SQLModel
لنفترض أن لديك نظامًا يتعامل مع الحزم والتنزيلات المرتبطة بها. في هذه الحالة، الهدف هو جمع عدد التنزيلات لكل حزمة وإرجاعه كجزء من النموذج المستجيب في FastAPI. يجب أولاً إعداد النماذج. لنبدأ بتعريف نموذج الحزمة ونموذج التنزيل بالشكل التالي:
class PackageBase(SQLModel):
pass
class Package(PackageBase, table=True):
id: int = Field(default=None, primary_key=True)
downloads: List["Download"] = Relationship(back_populates="package")
class Download(SQLModel, table=True):
id: int = Field(default=None, primary_key=True)
package_id: int = Field(foreign_key="package.id")
count: int
بعد إعداد النماذج، نحتاج إلى إضافة عمود "downloads_total" إلى نموذج الاستجابة. هنا يأتي دور النموذج المحسوب:
class PackagePublic(PackageBase):
id: int
downloads_total: int
إعداد استعلام لجمع البيانات
لجمع عدد التنزيلات لكل حزمة، يمكننا استخدام استعلام SQL مع الإشارة إلى دالة SUM
لجمع عدد التنزيلات. الاستعلام سيكون على شكل:
from sqlmodel import select
statement = select(Package, func.sum(Download.count).label("downloads_total"))\
.join(Download)\
.group_by(Package.id)
هنا، نستخدم select
لتحديد ما نريد استرجاعه من قاعدة البيانات، مما يمكننا من العودة إلى حقول النموذج المحددة مع القيمة المحسوبة.
تنفيذ الاستعلام في FastAPI
الخطوة الأخيرة هي دمج الاستعلام ضمن نقطة النهاية في FastAPI:
@app.get("/packages", response_model=list[PackagePublic])
def get_packages(session: Session = Depends(get_session)):
statement = select(Package, func.sum(Download.count).label("downloads_total"))\
.join(Download)\
.group_by(Package.id)
result = session.exec(statement).all()
return result
بهذا، بعد تنفيذ GET على المسار /packages
، ستحصل على قائمة من الحزم مع مجموع التنزيلات لكل منها، مما يسهل مهمتك في تقديم البيانات للمستخدمين بشكل فعّال.
استنتاجات
في الختام، فإن إضافة عمود محسوب إلى جدول في SQLModel تعتبر إحدى الطرق الفعّالة لتعزيز أداء التطبيقات التي تعتمد على قواعد البيانات. إنه يتيح لك إجراء عمليات حسابية معقدة والحصول على معلومات دقيقة بوقت أقل. استخدام مكتبة SQLModel مع FastAPI يفتح آفاقًا جديدة للمطورين، حيث يمكنهم التركيز على بناء وظائف متقدمة دون تعقيدات غير ضرورية. إن إتقان كيفية استخدام الأعمدة المحسوبة ليس فقط يُضفي ميزات جديدة على تطبيقك، ولكنه أيضًا يحسن من تجربة المستخدم بشكل عام.
المداخلة هنا تعتبر مثالية لكل من يسعى للتطوير في بيئة SQLModel وFastAPI، وتظهر كيف يمكن المزاوجة بين الذكاء الحسابي وسهولة الاستخدام.
إذا كنت ترغب في تعميق معرفتك حول كيفية إضافة عمود محسوب إلى جدول SQLModel، فاعلم أن هذه العملية تتطلب فقط فهمًا أساسيًا لكل من SQLModel وFastAPI، مما يجعلها متاحة للجميع.