دليل البدء مع Firebase باستخدام Python: إنشاء قاعدة بيانات Realtime وتنفيذ CRUD
مقدمة إلى Firebase مع Python
إذا كنت تبحث عن طريقة سريعة وموثوقة لبناء تطبيقات تعتمد على خدمات سحابية جاهزة، فإن Firebase يعد من أبرز الخيارات المطروحة. توفّر هذه المنصة من Google مجموعة واسعة من الأدوات التي تساعد المطورين على تسريع عملية التطوير دون الحاجة إلى إدارة البنية التحتية الخلفية بشكل مباشر.
في هذا الدليل العملي، ستتعلم كيفية إعداد Firebase Realtime Database وربطها مع Python، ثم تنفيذ العمليات الأساسية على البيانات مثل الإضافة والقراءة والتحديث والحذف. الهدف هنا ليس فقط نقل الخطوات، بل تقديم شرح واضح ومفيد يساعدك على بناء فهم حقيقي يمكن الاعتماد عليه في مشاريعك.

ما هو Firebase ولماذا يستخدمه المطورون؟
تقدم Firebase مفهوم BaaS أو Backend as a Service، أي أنها توفر لك معظم احتياجات الواجهة الخلفية كخدمة جاهزة. وهذا يعني أنك تستطيع التركيز على منطق التطبيق وتجربة المستخدم بدلاً من الانشغال بإعداد الخوادم والتوسع والصيانة.
من أبرز خدمات المنصة:
Realtime Databaseلتخزين البيانات ومزامنتها لحظياً.Cloud Firestoreكقاعدة بيانات حديثة مرنة وقابلة للتوسع.Authenticationلإدارة تسجيل الدخول والمستخدمين.- الاستضافة السحابية.
- واجهات وخدمات ذكية مثل التعرف على النصوص وتصنيف الصور.
في هذا المقال سنركز على Realtime Database لأنها مناسبة جداً للتجارب السريعة والتطبيقات التي تحتاج إلى تحديثات مباشرة وفورية.
كيفية إنشاء Firebase Realtime Database
إنشاء مشروع جديد على Firebase
ابدأ بإنشاء مشروع جديد من لوحة تحكم Firebase. يمكنك مثلاً تسميته BookStoreProject. بعد اكتمال إنشاء المشروع، انتقل إلى قسم Realtime Database ثم اختر Create Database.

اختيار الموقع وقواعد الأمان
عند إنشاء قاعدة البيانات، سيُطلب منك تحديد موقع الاستضافة الجغرافي، ثم اختيار إعدادات الحماية. ستجد غالباً خيارين:
- الوضع المقفل: يمنع جميع عمليات القراءة والكتابة.
- وضع الاختبار: يسمح بالقراءة والكتابة لمدة افتراضية تصل إلى 30 يوماً.
ولأننا سنجري عمليات إضافة وتعديل وقراءة أثناء الشرح، فإن test mode هو الأنسب في مرحلة التعلم. لكن في المشاريع الحقيقية يجب مراجعة قواعد الأمان بعناية قبل الإطلاق.
بعد هذه الخطوة تصبح قاعدة البيانات جاهزة للاستخدام.
ربط Firebase مع Python
تثبيت مكتبة الإدارة
للتعامل مع قاعدة البيانات من خلال Python سنستخدم مكتبة firebase_admin. ابدأ بتثبيتها عبر الأمر التالي:
pip install firebase_admin
تهيئة الاتصال بقاعدة البيانات
بعد تثبيت المكتبة، ستحتاج إلى تهيئة الاتصال عبر Admin SDK. الشكل الأساسي للاتصال يكون كالتالي:
import firebase_admin
cred_obj = firebase_admin.credentials.Certificate('....path to file')
default_app = firebase_admin.initialize_app(cred_obj, {
'databaseURL': 'databaseURL'
})
المتطلبات الأساسية قبل تشغيل الكود
هناك عنصران أساسيان يجب توفيرهما حتى يعمل الاتصال بشكل صحيح:
- ملف مفتاح حساب الخدمة
Service Account Key. - رابط قاعدة البيانات
databaseURL.
تسمح Firebase بالوصول إلى واجهات الخادم عبر حسابات خدمة من Google. وللمصادقة، تحتاج إلى ملف مفتاح خاص بصيغة JSON. لذلك يجب توليد هذا الملف من إعدادات المشروع ثم تنزيله وحفظه داخل مشروعك.

يمكنك الحصول على هذا الملف من خلال الذهاب إلى إعدادات المشروع ثم اختيار Generate new private key. بعد ذلك ضع المسار الصحيح للملف داخل الدالة Certificate().
أما قيمة databaseURL فستجدها مباشرة داخل صفحة Realtime Database في لوحة تحكم Firebase.
كيفية الكتابة إلى Firebase Realtime Database باستخدام Python
تحديد المرجع باستخدام reference()
قبل تخزين البيانات، نحتاج إلى تحديد الموضع الذي سنكتب فيه داخل قاعدة البيانات:
from firebase_admin import db
ref = db.reference("/")
في هذا المثال قمنا بتحديد الجذر /، لكن يمكنك أيضاً تحديد مسار فرعي أو مفتاح معين بحسب بنية بياناتك.
شكل البيانات المسموح به
تعتمد Realtime Database على بنية JSON، لذلك يجب أن تكون البيانات على شكل أزواج من key-value. إذا كنت تريد مفاتيح فريدة يتم توليدها تلقائياً من النظام، فبإمكانك استخدام الدالة push()، وسنشرحها بعد قليل.
لنفرض أن لدينا بيانات لأربعة كتب في ملف JSON بهذا الشكل:
{
"Book1": {
"Title": "The Fellowship of the Ring",
"Author": "J.R.R. Tolkien",
"Genre": "Epic fantasy",
"Price": 100
},
"Book2": {
"Title": "The Two Towers",
"Author": "J.R.R. Tolkien",
"Genre": "Epic fantasy",
"Price": 100
},
"Book3": {
"Title": "The Return of the King",
"Author": "J.R.R. Tolkien",
"Genre": "Epic fantasy",
"Price": 100
},
"Book4": {
"Title": "Brida",
"Author": "Paulo Coelho",
"Genre": "Fiction",
"Price": 100
}
}
إضافة البيانات باستخدام set()
بعد تجهيز الملف، يمكن تحميله وإرساله إلى قاعدة البيانات باستخدام set():
import json
with open("book_info.json", "r") as f:
file_contents = json.load(f)
ref.set(file_contents)
تقوم الدالة set() بكتابة البيانات في المرجع المحدد، وإذا كان هناك محتوى سابق في نفس المسار، فسيتم استبداله كاملاً.

إضافة بيانات بمفاتيح فريدة عبر push()
توفر Firebase الدالة push() لإنشاء مفتاح فريد تلقائياً لكل عنصر جديد. هذه الطريقة مفيدة جداً عندما تتوقع تعدد عمليات الكتابة على نفس المسار، لأنها تقلل احتمال الكتابة فوق البيانات السابقة.
إذا كان أكثر من مصدر يكتب داخل المسار نفسه، فإن استخدام set() مباشرة قد يؤدي إلى استبدال محتوى قائم. أما push() فتضيف عنصراً جديداً بمفتاح مولد تلقائياً، ما يجعل كل إدخال مستقلاً.
ref = db.reference("/")
ref.set({
"Books": {
"Best_Sellers": -1
}
})
ref = db.reference("/Books/Best_Sellers")
import json
with open("book_info.json", "r") as f:
file_contents = json.load(f)
for key, value in file_contents.items():
ref.push().set(value)

ملاحظة مهمة حول push() وset()
من المهم الانتباه إلى أن push() وset() ليسا عمليتين ذريتين atomic. هذا يعني أنه لا يوجد ضمان مطلق بأنهما سينفذان كوحدة واحدة بلا انقطاع. في بعض الحالات، قد يُنشأ المفتاح أولاً بينما لا تكون القيمة قد كُتبت بعد، لذلك عند القراءة أثناء التحديث قد تظهر مفاتيح موجودة دون بيانات مكتملة.
تحديث البيانات في Firebase باستخدام Python
تحديث البيانات عملية مباشرة. كل ما عليك فعله هو تحديد المرجع الصحيح ثم استخدام الدالة update().
في المثال التالي، سنفترض أن كتب الكاتب J.R.R. Tolkien أصبحت بسعر 80 بدلاً من السعر السابق:
ref = db.reference("/Books/Best_Sellers/")
best_sellers = ref.get()
print(best_sellers)
for key, value in best_sellers.items():
if value["Author"] == "J.R.R. Tolkien":
value["Price"] = 90
ref.child(key).update({"Price": 80})
تعتمد الفكرة هنا على:
- جلب البيانات عبر
get(). - المرور على العناصر.
- فحص قيمة الحقل
Author. - تعديل الحقل المطلوب عبر
update().

قراءة البيانات والاستعلام عنها من Firebase
سبق أن استخدمنا الدالة get() لجلب البيانات، لكنها ليست الخيار الوحيد. توفر Firebase Realtime Database مجموعة جيدة من أدوات الاستعلام التي تساعدك في ترتيب السجلات وتصفيتها واختيار نطاقات محددة منها.
الترتيب باستخدام order_by_child()
إذا أردت ترتيب الكتب بحسب السعر، يمكنك استخدام order_by_child(). لكن قبل ذلك، من الأفضل تعريف الحقل المفهرس داخل قواعد الأمان باستخدام .indexOn حتى تعمل الاستعلامات بكفاءة.

بعد ذلك يمكنك تنفيذ الاستعلام بالشكل التالي:
ref = db.reference("/Books/Best_Sellers/")
print(ref.order_by_child("Price").get())
تعيد هذه العملية غالباً كائناً من نوع OrderedDict يحافظ على الترتيب الناتج من الاستعلام.
أمثلة مفيدة على الاستعلامات
إليك بعض الأمثلة العملية الشائعة:
- الترتيب حسب المفتاح باستخدام
order_by_key(). - أعلى سعر باستخدام
limit_to_last(1). - أقل سعر باستخدام
limit_to_first(1). - المطابقة الدقيقة لقيمة محددة باستخدام
equal_to().
ref.order_by_child("Price").limit_to_last(1).get()
ref.order_by_child("Price").limit_to_first(1).get()
ref.order_by_child("Price").equal_to(80).get()
هذه الأدوات تمنحك مرونة كبيرة عند بناء لوحات عرض أو فلاتر أو تقارير تعتمد على البيانات المخزنة داخل التطبيق.
حذف البيانات من Firebase باستخدام Python
حذف البيانات أيضاً عملية بسيطة. في المثال التالي سنحذف الكتب المصنفة ضمن Best_Sellers والتي يكون مؤلفها J.R.R. Tolkien:
ref = db.reference("/Books/Best_Sellers")
for key, value in best_sellers.items():
if value["Author"] == "J.R.R. Tolkien":
ref.child(key).set({})
يعتمد هذا المثال على تعيين قيمة فارغة في المسار الفرعي المستهدف. ويمكنك في بعض السيناريوهات استخدام أساليب حذف أخرى بحسب بنية المشروع وطريقة تنظيم البيانات.

أفضل ممارسات عند استخدام Firebase مع Python
- لا تستخدم
test modeفي بيئة الإنتاج. - احفظ ملف
Service Account JSONبعيداً عن المستودعات العامة مثلGitHub. - صمم بنية
JSONبعناية لتقليل التكرار وتسهيل الاستعلام. - استخدم الفهارس مثل
.indexOnلتحسين الأداء عند الاستعلام. - اختبر تأثير عمليات
set()لأنها قد تستبدل بيانات كاملة في نفس المسار. - فضّل
push()عندما تحتاج إلى سجلات متعددة بمفاتيح فريدة.
متى تختار Realtime Database؟
يكون هذا الخيار مناسباً عندما تحتاج إلى:
- تحديثات لحظية مباشرة بين المستخدمين.
- مشاريع أولية أو نماذج سريعة
MVP. - تطبيقات دردشة أو تعقب مباشر أو لوحات حالة حية.
أما إذا كان مشروعك يتطلب استعلامات أكثر تعقيداً وهيكلة أوسع للبيانات، فقد يكون Cloud Firestore خياراً أفضل في بعض الحالات.
الخلاصة التقنية
يوفر الجمع بين Firebase Realtime Database وPython حلاً عملياً وسريعاً لبناء تطبيقات تعتمد على بيانات متزامنة وسهلة الإدارة. من الناحية التقنية، تعد الدوال set() وpush() وupdate() وget() أساس التعامل اليومي مع البيانات، لكن الاستخدام الاحترافي يتطلب الانتباه إلى بنية البيانات، وقواعد الأمان، والفهرسة، وطبيعة التزامن أثناء الكتابة. إذا أتقنت هذه الأساسيات، فستتمكن من بناء طبقة خلفية فعالة دون تعقيد كبير.