Skip to content

الفصل 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 قطع

مُرخَّص بموجب رخصة MIT