في عالم تطوير الويب الحديث، يظهر إطار العمل Flask كأحد أدوات التطوير الشهيرة والمفضلة لدى المطورين، حيث يوفر مرونة عالية وأداء ممتاز. عندما يتعلق الأمر بالتفاعل مع قواعد البيانات، فإن SQLite يعد خيارًا مثاليًا للمشاريع الصغيرة إلى المتوسطة، حيث يوفر نظام قاعدة بيانات خفيف وسهل الاستخدام.
إذا كنت ترغب في استخدام علاقة “one-to-many” بين جداول قاعدة البيانات في Flask مع SQLite، يمكنك تحقيق ذلك باستخدام مكتبة SQLAlchemy، التي توفر واجهة ORM (Object-Relational Mapping) لتسهيل التفاعل بين التطبيق وقاعدة البيانات. دعنا نستعرض كيف يمكنك تحقيق هذه العلاقة.
في البداية، يجب عليك تعريف نموذجين (Models) لجداول قاعدة البيانات الخاصة بك. لنفترض أن لديك جدولين هما User و Post، حيث يكون لكل مستخدم عدة منشورات. في هذه الحالة، ستكون هناك علاقة “one-to-many” بين جدولي User و Post.
pythonfrom flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
posts = db.relationship('Post', backref='user', lazy=True)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
body = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
في هذا المثال، تم استخدام db.relationship
في نموذج User لتعيين العلاقة “one-to-many”. يتم تحديد backref
ليتيح لك الوصول إلى المنشورات المتعلقة بالمستخدم بسهولة.
ثم، يجب عليك إعداد وتكوين التطبيق Flask الخاص بك لاستخدام هذه النماذج وقاعدة البيانات. يمكنك فعل ذلك كما يلي:
pythonfrom flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db.init_app(app)
with app.app_context():
db.create_all()
يجب أن تقوم بتعيين عنوان قاعدة البيانات ('sqlite:///site.db'
في هذا المثال) وتهيئة SQLAlchemy لاستخدام تطبيق Flask.
بهذا، يمكنك الآن إجراء استعلامات متقدمة باستخدام SQLAlchemy لاسترجاع البيانات من جدولي User و Post بمراعاة العلاقة “one-to-many” بينهما. يتيح لك هذا النهج بناء تطبيقات قوية وديناميكية باستخدام Flask وقاعدة البيانات SQLite بشكل متقدم وفعّال.
المزيد من المعلومات
بالطبع، دعنا نوسع المحادثة لتشمل المزيد من المعلومات حول كيفية استخدام علاقة “one-to-many” بفعالية في تطبيق Flask مع قاعدة البيانات SQLite.
العمليات الأساسية للتفاعل مع العلاقة “one-to-many”:
-
إضافة منشور للمستخدم:
عندما تريد إضافة منشور إلى مستخدم معين، يمكنك استخدام العلاقة المعرفة في نموذج User للوصول إلى قائمة المنشورات المتعلقة بالمستخدم وإضافة منشور جديد.pythonuser = User.query.filter_by(username='اسم_المستخدم').first() new_post = Post(title='عنوان المنشور', body='محتوى المنشور', user=user) db.session.add(new_post) db.session.commit()
-
استرجاع جميع المنشورات لمستخدم معين:
يمكنك استخدام الخاصيةposts
المعرفة في نموذج User لاسترجاع جميع المنشورات المتعلقة بمستخدم محدد.pythonuser = User.query.filter_by(username='اسم_المستخدم').first() user_posts = user.posts
-
الاستعلام عن المنشورات مع معلومات المستخدم:
عند استرجاع المنشورات، يمكنك أيضًا الوصول إلى معلومات المستخدم الخاصة بها باستخدام العلاقة المعرفة في نموذج Post.pythonpost = Post.query.first() username = post.user.username
التحكم في العلاقة “one-to-many”:
-
تحميل كسل (Lazy Loading):
يمكنك تحديد متى يجب تحميل البيانات ذات الصلة، إما عند الوصول (lazy=’dynamic’) أو عند تحميل الكائن الرئيسي (lazy=True)، أو تحميلها بشكل كامل مع الكائن الرئيسي (lazy=False).pythonclass User(db.Model): # ... posts = db.relationship('Post', backref='user', lazy=True)
-
حذف المنشورات عند حذف المستخدم:
يمكنك تكوين SQLAlchemy لحذف المنشورات تلقائيًا عند حذف المستخدم باستخدامcascade
.pythonclass User(db.Model): # ... posts = db.relationship('Post', backref='user', lazy=True, cascade='all, delete-orphan')
استخدام Flask-Migrate لإدارة التحديثات:
عند تغيير نماذج قاعدة البيانات، يفيد استخدام Flask-Migrate لإدارة التحديثات بشكل آمن. يمكنك إعداد Flask-Migrate باستخدام الأوامر التالية:
bashflask db init
flask db migrate -m "إنشاء الجداول الأولية"
flask db upgrade
الختام:
بهذا، يمكنك تحقيق تفاعل فعّال مع علاقة “one-to-many” في تطبيق Flask باستخدام قاعدة البيانات SQLite. يسمح لك هذا النهج ببناء تطبيقات قوية ومرنة تتيح للمستخدمين إنشاء وتحرير المحتوى بسهولة.