نسخة تجريبية من المنقذ: الاشتراك المدفوع والمساعد الذكي لم يُفعَّلا بعد، والمحتوى متاح للتجربة.

الوحدة 1: الوحدة الأولى: قواعد البيانات SQLite في Python

الدرس 4إضافة البيانات Inserting Data

من كتاب الطالبتقنية المعلومات 11 — الصف الحادي عشر — الفصل الدراسي الأول · من صفحة 55

أهداف الدرس

  • أتعرّف على مفهوم عمليات CRUD وكيفية تطبيقها على قواعد البيانات.
  • أُدرج سجلًا واحدًا في قاعدة البيانات باستخدام الدالة execute().
  • أُدرج عدة سجلات دفعة واحدة باستخدام الدالة executemany().
  • أطوّر تعليمات برمجية لاستقبال بيانات المستخدم وتخزينها في قاعدة البيانات.
  • أطبّق آليات التعامل مع الاستثناءات لضمان سلامة البيانات وإغلاق الاتصال بقاعدة البيانات بشكل صحيح.
  • أعاين محتوى الجداول باستخدام برنامج DB Browser for SQLite.

الشرح خطوة بخطوة

1 / 210:00

الموضع محفوظ على هذا الجهاز.

المقطع 1 من 5التعامل مع قواعد البيانات SQLite في Python: عمليات CRUD0:33

لا يوجد صوت عربي على هذا الجهاز. الشرح الصوتي المسجّل سيتوفر لهذا الدرس قريبًا

مقاطع الدرس

0 من 5 مكتمل

التعامل مع قواعد البيانات SQLite في Python: عمليات CRUD57)

  1. عند التعامل مع قواعد البيانات هناك أربع عمليات، أي مهام، رئيسة تُستخدم بصورة متكررة، وتُمثل بالاختصار CRUD.CREATE (INSERT) READ (SELECT) UPDATE DELETE
  2. الإدخال: إضافة بيانات جديدة إلى قاعدة البيانات.INSERT
  3. القراءة: قراءة واسترجاع بيانات من قاعدة البيانات.SELECT
  4. التعديل: تعديل أو تحديث بيانات مُخزنة في قاعدة البيانات.UPDATE
  5. الحذف: حذف بيانات موجودة في قاعدة البيانات.DELETE

إضافة البيانات Inserting Data57)

تُعد عملية إضافة البيانات من العمليات الأساسية في إدارة قواعد البيانات، حيث تتبع نهجًا منظمًا لتخزين البيانات في الجداول.57)

  1. هذه صيغة التعليمة البرمجية لإضافة البيانات كما في شكل رقم (4-1).cursor.execute("INSERT INTO table_name (column1, column2, ...) VALUES (?, ?, ...)", (value1, value2, ...))
  2. الجزء الأول ينفذ أمر SQL داخل قاعدة البيانات.cursor.execute
  3. ثم أمر SQL لإضافة بيانات للجدول، يليه اسم الجدول.INSERT INTO table_name
  4. ثم أسماء الأعمدة بين قوسين ويفصل بينها فاصلة.(column1, column2, ...)
  5. ثم كلمة القيم يليها عناصر مؤقتة تُسمى placeholders، وهي مواضع القيم المطلوب إدخالها.VALUES (?, ?, ...)
  6. ثم بعد الفاصلة القيم المطلوب إدخالها فعليًا بالترتيب نفسه.(value1, value2, ...)

خطوات إدخال البيانات في قاعدة البيانات58)

  1. الخطوة الأولى: تحديد القيم المطلوب إضافتها لأعمدة الجدول.
  2. الخطوة الثانية: كتابة التعليمات البرمجية، وهي ست تعليمات بالترتيب: استدعاء المكتبة، ثم إنشاء أو فتح اتصال بقاعدة البيانات، ثم إنشاء كائن المؤشر، ثم إضافة القيم للأعمدة، ثم حفظ التغييرات، ثم إغلاق الاتصال.
  3. الخطوة الثالثة: تنفيذ التعليمات البرمجية.
  4. الخطوة الرابعة: معاينة محتوى الجدول في برنامج DB Browser.

إدخال صف واحد إلى الجدول — مثال 158)

  1. قيم الصف المطلوب إدخاله كما في جدول رقم (4-1): عنوان الكتاب.title: Arabic
  2. المؤلف.author: Arabic SD
  3. سنة النشر.year: 2001
  4. التصنيف.category: Art/Science
  5. السعر فارغ.price: NULL
  6. ولا نُدخل قيمة العمود id يدويًا، وسنعرف بعد قليل لماذا.id
  7. وخطوات التنفيذ ثمانٍ: استدعاء المكتبة، ثم إنشاء أو فتح الاتصال، ثم إنشاء كائن المؤشر، ثم إضافة البيانات، ثم حفظ التغييرات، ثم إغلاق الاتصال، ثم تنفيذ التعليمات البرمجية، ثم معاينة النتائج في برنامج DB Browser.
مثال
  1. السطر الأول: استيراد مكتبة SQLite.

    import sqlite3
  2. السطر الثاني: تعليق يوضح أن ما بعده هو الاتصال بقاعدة البيانات، والتعليق في بايثون يبدأ بعلامة الشباك ولا يُنفَّذ.

    # Connect to the database
  3. السطر الثالث: الاتصال بقاعدة بيانات grade11_books.db.

    connection= sqlite3.connect('grade11_books.db ')
  4. السطر الرابع: إنشاء كائن المؤشر cursor لتنفيذ أوامر SQL.

    cursor = connection.cursor()
  5. السطر الخامس: تعليق يوضح أن ما بعده إضافة بيانات إلى جدول الكتب.

    # Insert data into table book
  6. السطر السادس: بداية تنفيذ أمر SQL، والأمر مكتوب بين ثلاث علامات تنصيص مفردة.

    cursor.execute('''
  7. السطر السابع: أمر الإضافة إلى جدول book مع أسماء الأعمدة الخمسة المطلوب تعبئتها.

    INSERT INTO book(title, author,year,category,price)
  8. السطر الثامن: العناصر المؤقتة الخمسة التي ستُستبدل بالقيم، ثم إغلاق النص وفاصلة.

    VALUES( ?,?,?,?,?)'''),
  9. السطر التاسع: القيم المطلوب إدخالها بالترتيب نفسه، وNone تعني قيمة فارغة.

    ('Arabic', 'Arabic SD', 2001, 'Art/Science',None)
  10. السطر العاشر: إغلاق قوس الدالة execute.

    )
  11. السطر الحادي عشر: تعليق يوضح أن ما بعده حفظ التغييرات.

    # Commit changes
  12. السطر الثاني عشر: حفظ التغييرات في قاعدة البيانات.

    connection.commit()
  13. السطر الثالث عشر: تعليق يوضح أن ما بعده إغلاق قاعدة البيانات.

    # Close database
  14. السطر الرابع عشر: إغلاق الاتصال بقاعدة البيانات.

    connection.close()
59)
  1. كتلة execute كاملة معناها: إضافة بيانات لأعمدة الجدول.
  2. العنصر المؤقت يتم استبداله بالقيم المطلوبة بطريقة آمنة.placeholder (?)
  3. المعاملات تُستخدم بدلًا من إدخال القيم مباشرة في الاستعلام، وذلك لحماية قاعدة البيانات ومنع هجمات الحقن البرمجي.Parameters SQL Injection
  4. عند إرسال هذه القيمة إلى قاعدة بيانات SQLite تتحول تلقائيًا إلى قيمة فارغة في قاعدة البيانات، وهي الطريقة الصحيحة لإدخال القيم الفارغة في بايثون.None NULL
  5. حفظ التغييرات في قاعدة البيانات.connection.commit()
  6. إغلاق الاتصال بقاعدة البيانات.connection.close()
انتبه
الحقن البرمجي SQL Injection هي نوع من الهجمات السيبرانية التي يستغل فيها المخترِق مدخلات المستخدم غير الآمنة لإدخال أوامر SQL ضارة، بهدف الوصول إلى قاعدة البيانات أو تعديلها أو حذف بيانات منها دون إذن. ولهذا نستخدم العناصر المؤقتة (?) والمعاملات بدل كتابة القيم داخل نص الاستعلام مباشرة.60)
  1. الملاحظة الأولى: تتولى قاعدة البيانات إسناد قيم رقمية تلقائية تصاعدية للمفتاح الأساسي من النوع INTEGER عند عدم إدخال قيم يدوية، ولهذا تركنا العمود id في المثال.
  2. الملاحظة الثانية: لإضافة أكثر من صف للجدول، يتم تكرار التعليمة البرمجية.cursor.execute("INSERT ....")
  3. الملاحظة الثالثة: عند تنفيذ أمر الإضافة دون تحديد اسم عمود أو أكثر، يتم تعبئة الأعمدة غير المحددة إما بقيمتها الافتراضية إن وجدت أو بالقيمة الفارغة، بشرط ألا يكون عليها قيد عدم الفراغ.INSERT DEFAULT / NULL NOT NULL
  4. الملاحظة الرابعة: يتم تمرير قيم الأعمدة في متغير من نوع مجموعة مرتبة.tuple
  5. الملاحظة الخامسة: عند إضافة قيمة واحدة للصف باستخدام tuple يجب إضافة علامة الفاصلة بعد القيمة.("AI_application" , ) أو (123 , )
انتبه
استخدام برنامج DB Browser for SQLite: يُمكن استخدام برنامج DB Browser للتأكد من إضافة الصف إلى الجدول. ويوضح شكل رقم (4-2) نتيجة معاينة بيانات جدول book من علامة التبويب Browse Data: الصف رقم 1 وفيه id يساوي 1، وtitle قيمته Arabic، وauthor قيمته Arabic SD، وyear قيمته 2001، وcategory قيمته Art/Science، وprice ظاهر بقيمة NULL.61)

إدخال سجلات متعددة إلى الجدول دفعة واحدة61)

  1. الدالة التي تُستخدم لإضافة مجموعة من الصفوف إلى الجدول دفعة واحدة.cursor.executemany()
  2. المعامل الأول: نص أمر الإضافة نفسه مع العناصر المؤقتة.'INSERT INTO table_name (column1, column2, ...) VALUES (? , ?, ...)',
  3. المعامل الثاني: قائمة بين قوسين مربعين، كل عنصر فيها مجموعة مرتبة تمثل صفًا كاملًا.[(value1_1, value1_2, ...), (value2_1, value2_2, ...), ... ]
  4. ثم نغلق قوس الدالة.)
  1. الصف الأول من جدول رقم (4-2).ICT | ICT Supervision | 2001 | Art/Science |
  2. الصف الثاني.Physics | Science SD | 2007 | Science | 1.500
  3. الصف الثالث.English | English SD | 2009 | Art/Science |
  4. ولا تُدخل قيم العمود id، فقاعدة البيانات تُسندها تلقائيًا تصاعديًا.
مثال
  1. السطر الأول: استيراد المكتبة.

    import sqlite3
  2. السطر الثاني: تعليق الاتصال بقاعدة البيانات.

    # Connect to the database
  3. السطر الثالث: الاتصال بقاعدة البيانات، ولاحظ هنا علامتي التنصيص المزدوجتين.

    connection= sqlite3.connect("grade11_books.db")
  4. السطر الرابع: إنشاء كائن المؤشر.

    cursor = connection.cursor()
  5. السطر الخامس: تعليق إضافة البيانات إلى جدول الكتب.

    # Insert data into table book
  6. السطر السادس: بداية دالة الإضافة المتعددة.

    cursor.executemany('''
  7. السطر السابع: أمر الإضافة مع أسماء الأعمدة الخمسة.

    INSERT INTO book(title, author,year,category,price)
  8. السطر الثامن: العناصر المؤقتة الخمسة، ثم إغلاق النص وفاصلة.

    VALUES( ?,?,?,?,?)'''),
  9. السطر التاسع: فتح القائمة بالقوس المربع.

    [
  10. السطر العاشر: الصف الأول كمجموعة مرتبة تنتهي بفاصلة.

    ('ICT', 'ICT SD',2001,'Art/Science',None),
  11. السطر الحادي عشر: الصف الثاني.

    ('Physics', 'Science SD', 2007,'Science',1.500),
  12. السطر الثاني عشر: الصف الثالث وبلا فاصلة بعده لأنه الأخير.

    ('English', 'English SD',2009,'Art/Science',None)
  13. السطر الثالث عشر: إغلاق القائمة بالقوس المربع.

    ]
  14. السطر الرابع عشر: إغلاق قوس الدالة.

    )
  15. السطر الخامس عشر: تعليق حفظ التغييرات.

    # Commit changes
  16. السطر السادس عشر: حفظ التغييرات.

    connection.commit()
  17. السطر السابع عشر: تعليق إغلاق قاعدة البيانات.

    # Close database
  18. السطر الثامن عشر: إغلاق الاتصال.

    connection.close()
62)
  1. استخدم الدالة لإدراج عدة سجلات في الجدول دفعة واحدة.cursor.executemany
  2. استخدام قائمة تتكون من عدة عناصر، كل عنصر من النوع مجموعة مرتبة.List tuple
  3. عدد عناصر القائمة يساوي عدد الصفوف المطلوب إضافتها، فثلاثة عناصر تعني ثلاثة صفوف.
  4. وكل مجموعة مرتبة تمثل صفًا واحدًا يحتوي على القيم المراد إضافتها إلى الأعمدة.title , author, year, category, price
  1. الملاحظة الأولى: يجب استخدام العناصر المؤقتة مع أمر الإدخال المتعدد لإدخال مجموعة من الصفوف دفعة واحدة.placeholders (?) executemany
  2. الملاحظة الثانية: يُمكن كتابة التعليمة البرمجية السابقة بصورة أخرى أوضح: نضع نص الأمر في متغير مستقل.insert_sql ='INSERT INTO book(title, author, year,category, price) VALUES (?,?,?,?,?)'
  3. ثم نضع الصفوف في قائمة مستقلة باسم قائمة الكتب.book_list = [
  4. الصف الأول. ('ICT', 'ICT SD', 2001, 'Art/Science', None),
  5. الصف الثاني. ('Physics', 'Science SD', 2007, 'Science', 1.500),
  6. الصف الثالث. ('English', 'English SD', 2009, 'Art/Science', None)
  7. ثم نغلق القائمة بالقوس المربع.]
  8. ثم نستدعي الدالة ونمرر لها المتغيرين فقط، فتصير التعليمة أقصر وأسهل قراءة.cursor.executemany(insert_sql , book_list)
انتبه
استخدام برنامج DB Browser for SQLite: يُمكن استخدام برنامج DB Browser للتأكد من إضافة الصفوف إلى الجدول، كما يوضح شكل رقم (4-3) معاينة بيانات صفوف جدول book. وهكذا تكون قاعدة القاعدة العملية: بعد كل عملية إضافة، نفتح البرنامج ونتحقق من الصفوف الجديدة بعلامة التبويب Browse Data.63)

الملخص

  • عمليات CRUD أربع: الإدخال INSERT، والقراءة SELECT، والتعديل UPDATE، والحذف DELETE.
  • صيغة الإضافة: cursor.execute("INSERT INTO table_name (column1, column2, ...) VALUES (?, ?, ...)", (value1, value2, ...)).
  • العناصر المؤقتة placeholders (?) تُستبدل بالقيم بطريقة آمنة، وتُستخدم المعاملات Parameters بدل كتابة القيم داخل الاستعلام لحماية قاعدة البيانات ومنع هجمات الحقن البرمجي SQL Injection.
  • القيمة None في Python تتحول تلقائيًا إلى NULL في SQLite، وهي الطريقة الصحيحة لإدخال القيم الفارغة.
  • تتولى قاعدة البيانات إسناد قيم رقمية تلقائية تصاعدية للمفتاح الأساسي من النوع INTEGER عند عدم إدخال قيم يدوية.
  • عند تنفيذ INSERT دون تحديد عمود أو أكثر، تُعبَّأ الأعمدة غير المحددة بقيمتها الافتراضية إن وجدت أو بالقيمة NULL، بشرط ألا يكون عليها قيد NOT NULL.
  • الدالة executemany() تُدرج عدة سجلات دفعة واحدة، ويُمرَّر لها نص الأمر ثم قائمة List عناصرها من النوع tuple، وعدد عناصر القائمة يساوي عدد الصفوف.
  • خطوات الإدخال: تحديد القيم، ثم كتابة التعليمات (sqlite3، الاتصال، المؤشر، الإضافة، commit، close)، ثم التنفيذ، ثم معاينة محتوى الجدول في DB Browser.

الأفكار الرئيسية

  1. علامة الاستفهام ليست مجرد اختصار في الكتابة، بل هي درع أمني: تفصل نص الأمر عن القيم فتمنع هجمات الحقن البرمجي SQL Injection.
  2. الفرق بين execute وexecutemany هو الفرق بين تمرير tuple واحد وتمرير قائمة من tuples: صف واحد مقابل عدة صفوف دفعة واحدة.
  3. ترك العمود id فارغًا ليس نسيانًا بل تصميم: قاعدة البيانات تتولى ترقيمه تلقائيًا لأنه مفتاح أساسي من النوع INTEGER.
  4. الإضافة لا تكتمل إلا بـ commit()، والتحقق البصري في DB Browser هو الدليل النهائي على نجاح العملية.

الأسئلة المهمة

ما عمليات CRUD؟ اذكرها مع أمر SQL المقابل لكل منها.

أربع عمليات رئيسة تُستخدم بصورة متكررة عند التعامل مع قواعد البيانات: الإدخال INSERT لإضافة بيانات جديدة إلى قاعدة البيانات، والقراءة SELECT لقراءة واسترجاع بيانات من قاعدة البيانات، والتعديل UPDATE لتعديل أو تحديث بيانات مخزنة، والحذف DELETE لحذف بيانات موجودة.

الكتاب صفحة 57

اكتب صيغة التعليمة البرمجية لإضافة البيانات، واشرح أجزاءها.

الصيغة: cursor.execute("INSERT INTO table_name (column1, column2, ...) VALUES (?, ?, ...)", (value1, value2, ...)). وcursor.execute يُنفذ أمر SQL داخل قاعدة البيانات، وINSERT INTO أمر SQL لإضافة بيانات للجدول، وtable_name اسم الجدول، و(column1, column2, ...) أسماء الأعمدة، و(?, ?, ...) عناصر مؤقتة placeholders للقيم المطلوب إدخالها، و(value1, value2, ...) القيم المطلوب إدخالها.

الكتاب صفحة 57

علّل: تُستخدم المعاملات Parameters والعناصر المؤقتة (?) بدلًا من إدخال القيم مباشرة في الاستعلام.

لحماية قاعدة البيانات ومنع هجمات الحقن البرمجي SQL Injection، وهي نوع من الهجمات السيبرانية التي يستغل فيها المخترِق مدخلات المستخدم غير الآمنة لإدخال أوامر SQL ضارة بهدف الوصول إلى قاعدة البيانات أو تعديلها أو حذف بيانات منها دون إذن. كما أن العنصر المؤقت (?) يتم استبداله بالقيم المطلوبة بطريقة آمنة.

الكتاب صفحة 60

ماذا يحدث عند إرسال القيمة None من Python إلى قاعدة بيانات SQLite؟

تتحول تلقائيًا إلى NULL في قاعدة البيانات، وهي تُمثل الطريقة الصحيحة لإدخال القيم الفارغة في Python.

الكتاب صفحة 60

لماذا لم تُدخَل قيمة للعمود id في مثالي الدرس؟

لأن قاعدة البيانات تتولى إسناد قيم رقمية تلقائية تصاعدية للمفتاح الأساسي من النوع INTEGER عند عدم إدخال قيم يدوية.

الكتاب صفحة 60

ماذا يحدث عند تنفيذ الأمر INSERT دون تحديد اسم عمود أو أكثر؟

يتم تعبئة الأعمدة غير المحددة إما بقيمتها الافتراضية (إن وجدت) أو بالقيمة NULL، بشرط ألا يكون عليها قيد NOT NULL.

الكتاب صفحة 60

قارن بين الدالتين execute() وexecutemany() في إضافة البيانات.

execute() تُستخدم لإدخال صف واحد، وتُمرَّر لها قيم الأعمدة في متغير من نوع tuple، ولإضافة أكثر من صف يتم تكرار التعليمة. أما executemany() فتُستخدم لإدراج عدة سجلات (rows) في الجدول دفعة واحدة، ويُمرَّر لها نص الأمر ثم قائمة (List) تتكون من عدة عناصر كل عنصر من النوع tuple، وعدد عناصر القائمة يساوي عدد الصفوف المطلوب إضافتها.

الكتاب صفحة 63

اذكر خطوات إدخال البيانات في قاعدة البيانات كما رتّبها الكتاب.

1) تحديد القيم المطلوب إضافتها لأعمدة الجدول. 2) كتابة التعليمات البرمجية: استدعاء مكتبة sqlite3، إنشاء / فتح اتصال بقاعدة البيانات، إنشاء كائن المؤشر، إضافة القيم للأعمدة، حفظ التغييرات، إغلاق الاتصال. 3) تنفيذ التعليمات البرمجية. 4) معاينة محتوى الجدول في برنامج DB Browser.

الكتاب صفحة 58

اختبار الدرس

أجب ثم اضغط «صحّح» لترى درجتك وتفسير كل إجابة.

سؤال 1
1

أي أوامر CRUD يُستخدم لقراءة واسترجاع بيانات من قاعدة البيانات؟

سهل
سؤال 2
2

ماذا تمثل علامة الاستفهام (?) في تعليمة الإضافة؟

متوسط
سؤال 3
3

أي دالة تُستخدم لإدراج عدة سجلات في الجدول دفعة واحدة؟

سهل
سؤال 4
4

في مثال الإدخال المتعدد، ما نوع كل عنصر داخل القائمة List؟

متوسط
سؤال 5
5

طالب أضاف صفًا إلى جدول book دون كتابة قيمة العمود id. ماذا يحدث؟

متوسط
سؤال 6
6

القيمة None في Python تتحول تلقائيًا إلى NULL عند إرسالها إلى قاعدة بيانات SQLite.

سهل
سؤال 7
7

يمكن استخدام executemany لإدخال مجموعة من الصفوف دون استخدام العناصر المؤقتة (?).

متوسط
سؤال 8
8

أكمل: عند تنفيذ الأمر INSERT دون تحديد اسم عمود أو أكثر، تُعبَّأ الأعمدة غير المحددة بقيمتها الافتراضية إن وجدت أو بالقيمة .........., بشرط ألا يكون عليها قيد NOT NULL.

متوسط
سؤال 9
9

ما الحقن البرمجي SQL Injection كما عرّفه الكتاب؟

متوسط
سؤال 10
10

عند إضافة قيمة واحدة فقط للصف باستخدام tuple، ما الذي يجب الانتباه له؟ اكتب مثالًا.

صعب

الواجب

أسئلة تطبيقية لتحلها في البيت. يمكنك طباعتها من الأعلى.

سؤال 1
1

اكتب تعليمة إضافة صف واحد إلى جدول book قيمه: title هو Math، وauthor هو Math SD، وyear هو 2015، وcategory هو Science، وprice فارغ.

متوسط
سؤال 2
2

أعد كتابة تعليمة الإدخال المتعدد في مثال 2 بالصورة الثانية التي ذكرها الكتاب (باستخدام متغيرين)، وبيّن فائدة هذه الصورة.

صعب
سؤال 3
3

زميلك كتب أمر الإضافة بوضع قيم المستخدم داخل نص الاستعلام مباشرة بدل العناصر المؤقتة. اشرح له الخطر واذكر البديل الصحيح.

صعب
سؤال 4
4

نفّذ عمليًا: أضف الصفوف الثلاثة في مثال 2 إلى جدول book، ثم تحقق من إضافتها ببرنامج DB Browser، واكتب ما ظهر لك في عمودَي id وprice.

متوسط

مصطلحات الدرس

CRUD
أربع عمليات رئيسة على قواعد البيانات: الإدخال INSERT، والقراءة SELECT، والتعديل UPDATE، والحذف DELETE.
INSERT INTO
أمر SQL لإضافة بيانات للجدول.
العناصر المؤقتة placeholders (?)
مواضع مؤقتة داخل الاستعلام تُستبدل بالقيم المطلوبة بطريقة آمنة.
المعاملات Parameters
القيم التي تُمرَّر خارج نص الاستعلام بدلًا من إدخالها مباشرة فيه، لحماية قاعدة البيانات.
الحقن البرمجي SQL Injection
نوع من الهجمات السيبرانية يستغل فيها المخترِق مدخلات المستخدم غير الآمنة لإدخال أوامر SQL ضارة للوصول إلى قاعدة البيانات أو تعديلها أو حذف بياناتها دون إذن.
None
قيمة في Python تتحول تلقائيًا إلى NULL عند إرسالها إلى قاعدة بيانات SQLite، وهي الطريقة الصحيحة لإدخال القيم الفارغة.
tuple
نوع متغير تُمرَّر فيه قيم الأعمدة، ويمثل كل واحد منه صفًا واحدًا.
executemany()
دالة تُستخدم لإدراج عدة سجلات (rows) في الجدول دفعة واحدة عبر قائمة List من tuples.

تمارين الكتاب كاملة

كل سؤال ونشاط وتمرين ورد في صفحات هذا الدرس، بنصه وإجابته النموذجية. 2 تمرينًا.

ورقة عمل (4) — إضافة سجل لجدول landmark بقاعدة البيانات Kuwait_landmarks.dbإضافة سجل لجدول landmark بقاعدة البيانات Kuwait_landmarks.db، باتباع الخطوات التالية: 1. استدعِ المشروع landmark_insert. 2. افتح ملف data_insert1.py (الأسطر المكتوبة: import sqlite3 ثم تعليق # Connect to the database ثم connection = sqlite3.connect ('Kuwait_landmarks.db') ثم cursor = connection.cursor() ثم تعليق # Insert data into table book ثم cursor.execute( والأسطر 7 و8 متروكة لك ثم ) ثم # Commit changes ثم connection.commit() ثم # Close database ثم connection.close()). 3. استكمل التعليمة البرمجية لإضافة سجل وفقًا للبيانات التالية: name هو Abdullah AlSalem Centre، وlocation هو Al-Shaab Area، وcategory هو Culture، وyear هو 2018، وid وprice بلا قيمة. 4. نفّذ التعليمات البرمجية. 5. عاين بيانات الجدول باستخدام برنامج DB Browser.64)

يُستكمل داخل قوسي cursor.execute بسطرين على نمط مثال 1: '''INSERT INTO landmark(name, location, category, year) VALUES( ?,?,?,?)''', ثم ('Abdullah AlSalem Centre', 'Al-Shaab Area', 'Culture', 2018). فتصير التعليمة: cursor.execute( '''INSERT INTO landmark(name, location, category, year) VALUES( ?,?,?,?)''', ('Abdullah AlSalem Centre', 'Al-Shaab Area', 'Culture', 2018) ). وترك العمودين id وprice جائز، فالأول مفتاح أساسي INTEGER تُسند له قاعدة البيانات قيمة تلقائية تصاعدية، والثاني عمود غير محدد فيُملأ بالقيمة NULL لأنه ليس عليه قيد NOT NULL. ويصح أيضًا ذكر price في قائمة الأعمدة وتمرير None له. الناتج المتوقع: لا تُطبع رسالة، وعند فتح DB Browser واختيار Browse Data للجدول landmark يظهر صف جديد id يساوي 1، وname يساوي Abdullah AlSalem Centre، وlocation يساوي Al-Shaab Area، وcategory يساوي Culture، وyear يساوي 2018، وprice قيمته NULL.

ورقة عمل (5) — إضافة عدة سجلات مرة واحدة لجدول landmark بقاعدة البيانات Kuwait_landmarks.dbإضافة عدة سجلات مرة واحدة لجدول landmark بقاعدة البيانات Kuwait_landmarks.db، باتباع الخطوات التالية: 1. استدعِ المشروع landmark_insert. 2. افتح ملف data_insert2.py، وفيه: import sqlite3 ثم connection = None ثم try: وداخلها connection=sqlite3.connect('Kuwait_landmarks.db') ثم cursor=connection.cursor() ثم تعليق # Insert data into landmark table ثم insert_sql="..." (فراغ) ثم landmarks_list = [('Failaka Island', 'Off the eastern coast of Kuwait', 'Historical Landmark', 1950,5), ('Souq Al-Mubarakiya','Central Kuwait City','Traditional Market',1897,0), ('Museum of Modern Art','Salmiya Area','Art Museum',1980,1)] ثم cursor.executemany(............ , ............) ثم connection.commit()، ثم except Exception as e : وفيها print("Error :", e)، ثم finally : وفيها if connection is not None: ثم connection.close(). 3. استكمل التعليمة البرمجية لإضافة الصفوف المخصصة للمتغير landmarks_list. 4. نفّذ التعليمات البرمجية. 5. عاين بيانات الجدول باستخدام برنامج DB Browser.65)

الفراغ الأول يُملأ بنص أمر الإضافة، والقيم في كل tuple خمس فتكون الأعمدة خمسة: insert_sql="INSERT INTO landmark(name, location, category, year, price) VALUES (?,?,?,?,?)". والفراغان في السطر الأخير يُملآن باسمَي المتغيرين بالترتيب: cursor.executemany(insert_sql , landmarks_list). وهذه هي الصورة البديلة التي ذكرها الكتاب في ملاحظات الإدخال المتعدد (متغير للأمر ومتغير للقائمة). الناتج المتوقع عند النجاح: لا تُطبع رسالة خطأ، وتُضاف ثلاثة صفوف؛ وعند فتح DB Browser واختيار Browse Data للجدول landmark تظهر: Failaka Island في Off the eastern coast of Kuwait وفئتها Historical Landmark وسنتها 1950 وسعرها 5، وSouq Al-Mubarakiya في Central Kuwait City وفئتها Traditional Market وسنتها 1897 وسعرها 0، وMuseum of Modern Art في Salmiya Area وفئتها Art Museum وسنتها 1980 وسعرها 1، مع أرقام id تلقائية تصاعدية. وإن حدث خطأ فستُطبع رسالة تبدأ بكلمة Error ثم وصف الخطأ، ويُغلق الاتصال في كل الأحوال داخل finally.

صفحات الكتاب

صفحات هذا الدرس من كتاب الطالب الرسمي كما هي، صفحات 55 إلى 66.

المصدر: تقنية المعلومات 11 — الصف الحادي عشر — الفصل الدراسي الأول

  • ص 57: «تُعد عملية إضافة البيانات من العمليات الأساسية في إدارة قواعد البيانات»
  • ص 60: «العنصر المؤقت placeholder (?) يتم استبداله بالقيم المطلوبة بطريقة آمنة»
  • ص 60: «تتولى قاعدة البيانات إسناد قيم رقمية تلقائية تصاعدية للمفتاح الأساسي من النوع INTEGER»
  • ص 62: «استخدم الدالة cursor.executemany لإدراج عدة سجلات (rows) في الجدول دفعة واحدة»
  • ص 63: «عدد عناصر القائمة يساوي عدد الصفوف المطلوب إضافتها»