الفصل 26: قواعد البيانات
مقدمة
لغة ص تدعم SQLite3 عبر مكتبة قاعدة_بيانات. هذا الفصل يغطي إنشاء قواعد البيانات واستعلامها وتحديثها.
العمليات الأساسية
sad
استورد قاعدة_بيانات من "قاعدة_بيانات"
# فتح قاعدة بيانات
متغير قب = جديد قاعدة_بيانات("مشروعي.db")
# إنشاء جدول
قب.نفّذ ("""
CREATE TABLE IF NOT EXISTS طلاب (
معرف INTEGER PRIMARY KEY AUTOINCREMENT,
اسم TEXT NOT NULL,
معدل REAL DEFAULT 0.0
)
""")
# إدراج بيانات
قب.نفّذ ("INSERT INTO طلاب (اسم، معدل) VALUES (?, ?)"، ["أحمد"، 3.8])
قب.نفّذ ("INSERT INTO طلاب (اسم، معدل) VALUES (?, ?)"، ["سارة"، 3.9])
# استعلام جميع الطلاب
متغير نتائج = قب.استعلم ("SELECT * FROM طلاب")
لكل صف في نتائج
اطبع_سطر (صف["اسم"] + " — المعدل: " + صف["معدل"])
نهاية
قب.أغلق()استعلام بشرط
sad
استورد قاعدة_بيانات من "قاعدة_بيانات"
متغير قب = جديد قاعدة_بيانات("بيانات.db")
# طلاب بمعدل عالي
متغير متفوقون = قب.استعلم (
"SELECT * FROM طلاب WHERE معدل > ? ORDER BY معدل DESC"،
[3.5]
)
اطبع_سطر ("الطلاب المتفوقون:")
لكل ط في متفوقون
اطبع_سطر (" - " + ط["اسم"] + ": " + ط["معدل"])
نهايةالتحديث والحذف
sad
استورد قاعدة_بيانات من "قاعدة_بيانات"
متغير قب = جديد قاعدة_بيانات("بيانات.db")
# تحديث معدل
قب.نفّذ ("UPDATE طلاب SET معدل = ? WHERE اسم = ?"، [4.0، "أحمد"])
# حذف طالب
قب.نفّذ ("DELETE FROM طلاب WHERE معدل < ?"، [2.0])
اطبع_سطر ("تم التحديث")المعاملات (Transactions)
sad
استورد قاعدة_بيانات من "قاعدة_بيانات"
متغير قب = جديد قاعدة_بيانات("بنك.db")
# معاملة آمنة
حاول
قب.ابدأ_معاملة()
قب.نفّذ ("UPDATE حسابات SET رصيد = رصيد - 500 WHERE معرف = 1")
قب.نفّذ ("UPDATE حسابات SET رصيد = رصيد + 500 WHERE معرف = 2")
قب.حفظ_معاملة()
اطبع_سطر ("تم التحويل بنجاح")
امسك (خ)
قب.تراجع_معاملة()
اطبع_سطر ("فشل التحويل: " + خ)
نهايةنمط مستودع البيانات
sad
استورد قاعدة_بيانات من "قاعدة_بيانات"
صنف مستودع_طلاب
خاص متغير _قب
باني(مسار)
هذا._قب = جديد قاعدة_بيانات(مسار)
هذا._قب.نفّذ ("CREATE TABLE IF NOT EXISTS طلاب (معرف INTEGER PRIMARY KEY, اسم TEXT, معدل REAL)")
نهاية
دالة حفظ(طالب)
إذا (طالب["معرف"] == لاشيء)
هذا._قب.نفّذ ("INSERT INTO طلاب (اسم، معدل) VALUES (?,?)"، [طالب["اسم"]، طالب["معدل"]])
وإلا
هذا._قب.نفّذ ("UPDATE طلاب SET اسم=?,معدل=? WHERE معرف=?"، [طالب["اسم"]، طالب["معدل"]، طالب["معرف"]])
نهاية
نهاية
دالة جلب_الكل()
ارجع هذا._قب.استعلم ("SELECT * FROM طلاب")
نهاية
نهاية
# الاستخدام
متغير مس = جديد مستودع_طلاب("بيانات.db")
مس.حفظ({"اسم": "أحمد"، "معدل": 3.8})
مس.حفظ({"اسم": "سارة"، "معدل": 3.9})
لكل ط في مس.جلب_الكل()
اطبع_سطر (ط["اسم"] + ": " + ط["معدل"])
نهايةتمرين
أنشئ نظام إدارة مخزون بسيط بجدولين:
- جدول منتجات بحقول: (معرف، اسم، سعر، كمية)
- جدول مبيعات بحقول: (معرف، معرف_منتج، كمية، تاريخ)
- رسالة عند انخفاض المخزون دون 5 قطع