تحديث البيانات
UPDATE • SET • WHERE • commit • ⏱ نحو 35 دقيقة
غيّر بياناتك... بدقّة!
تتغير الأسعار وتظهر أخطاء في الجداول، فهل نحذف الجدول وننشئه من جديد؟ طبعًا لا! تعديل البيانات Updating Data يُصحّح أو يُحدّث المعلومات المخزّنة دون المساس بباقي الصفوف، وننفّذه في SQLite بالأمر UPDATE. مثلًا: تغيير سعر الكتاب رقم 5 من 1.5 إلى 2.
ماذا يمكن أن نحدّث؟
1) قيمة واحدة في صف واحد
مثال: سعر كتاب واحد.
2) عدة قيم في صف واحد
مثال: السعر والسنة معًا.
3) قيم في مجموعة صفوف
مثال: كل كتب فئة Art.
صيغة كتابة تحديث البيانات في Python (شكل 6-1)
1 cursor.execute
تنفيذ أمر SQL.
2 UPDATE
أمر التحديث.
3 table_name
اسم الجدول.
4 column_name
العمود المراد تحديثه (بعد SET).
5 ?
مكان القيمة الجديدة.
6 condition_column
عمود الشرط (بعد WHERE).
7 ?
مكان قيمة الشرط.
8 (value, condition_value)
القيم بالترتيب: الجديدة ثم قيمة الشرط.
الصيغة كاملة
cursor.execute
الأسئلة ? تأخذ القيم بنفس ترتيب ظهورها: أولًا القيمة الجديدة ثم قيمة الشرط.
cursor.execute('''UPDATE table_name
SET column_name = ?
WHERE condition_column = ?''',
(value, condition_value))خطوات تحديث بيانات قاعدة البيانات
- 1حدّد المطلوبالعمود والقيمة والشرط
- 2اكتب التعليماتمن import حتى close()
- 3نفّذتشغيل البرنامج Run
- 4عاينفي DB Browser
ملاحظة الكتاب
يتم تحديث جميع الصفوف إذا لم يتم تحديد شرط!
تنبيه: ماذا لو نسينا WHERE؟
✅ مع WHERE: صف واحد فقط يتغيّر
UPDATE books SET price = ? WHERE id = ?→ الصف الذي id = 5 فقط
❌ بدون WHERE: تتغيّر جميع الصفوف!
UPDATE books SET price = ?→ كل الأسعار أصبحت 2
أمثلة الكتاب على جدول books
مثال (1): تعديل سعر كتاب واحد
cursor.execute('''UPDATE books SET price = ?
WHERE id = ?''', (2, 5))→ صف واحد تغيّر: السعر 2 للكتاب الذي id = 5
مثال (2): تعديل أكثر من عمود
cursor.execute('''UPDATE books SET price = ?, year = ?
WHERE category = ?''', (2.5, 2024, 'Art'))→ 5 صفوف تغيّرت: كل كتب فئة Art
مثال (3): الصفوف التي لا تحوي قيمة
cursor.execute('''UPDATE books SET price = ?, year = ?
WHERE year IS NULL''', (2.5, 2024))→ 0 = عدد الصفوف المتأثرة (لا يوجد صف سنة نشره NULL)
مثال (4): شرط مركّب بالرابط AND
cursor.execute('''UPDATE books SET price = ?
WHERE price < ? AND category = ?''', (3, 2.5, 'Art'))→ 5 صفوف تغيّرت (يجب تحقق الشرطين معًا)
مثال (5): تعديل عمودين بشرط مركّب
cursor.execute('''UPDATE books SET category = ?, price = ?
WHERE category = ? AND price < ?''', ('Science', 3, 'Art', 2.5))→ 5 صفوف تغيّرت: تغيّر العمودان معًا
كم صفًّا تغيّر؟ وكيف نحفظ؟
الخاصية connection.total_changes تعيد عدد الصفوف التي تأثرت بالتعديل. ثم connection.commit() تنقل التعديل من الذاكرة (مؤقت) إلى ملف قاعدة البيانات (حفظ دائم). بدون commit() لا تُحفظ التعديلات!
🧪 جرّبها على جدول landmarks: صف واحد
الجزء العلوي يبني الجدول. شغّل البرنامج ولاحظ عدد الصفوف المتغيرة وقيمة السعر الجديدة للصف 1.
اضغط «شغّل» لترى الناتج هنا.
🧪 والآن... احذف WHERE!
شغّله وانظر كم صفًّا تغيّر. ماذا حدث لأسعار كل المعالم؟
اضغط «شغّل» لترى الناتج هنا.
🧪 الصفوف التي لا تحوي قيمة: IS NULL
السعر NULL في الصف الأول فقط. ثم جرّب استبدال IS NULL بالعلامة = NULL ولاحظ أن النتيجة تصبح 0!
اضغط «شغّل» لترى الناتج هنا.
أنهيت القراءة! حان وقت 🎮 اللعب