أهداف الدرس
- أعرّف مفهوم الاستعلام Database Query لاسترجاع البيانات من قواعد البيانات.
- أوضّح مفهوم الشروط المنطقية Logical Expressions وأهميتها في تحديد الصفوف المطلوب التعامل معها.
- أميّز بين الشروط البسيطة Simple Conditions والشروط المركبة Compound Conditions.
- أتعرّف على العوامل الشرطية المختلفة في SQLite وكيفية استخدامها.
- أكتب استعلامات SQL في بيئة Python باستخدام مكتبة sqlite3، وأنفّذها وأسترجع النتائج باستخدام دوال fetch المختلفة.
- أطبّق خطوات إنشاء وتنفيذ استعلام في SQLite ضمن بيئة تطوير Python، وأعرض نتائجه باستخدام الحلقات التكرارية.
الشرح خطوة بخطوة
الموضع محفوظ على هذا الجهاز.
المقطع 1 من 7الاستعلام عن البيانات Querying Data0:22
لا يوجد صوت عربي على هذا الجهاز. الشرح الصوتي المسجّل سيتوفر لهذا الدرس قريبًا
مقاطع الدرس
0 من 7 مكتملالاستعلام عن البيانات Querying Data(ص 69)
الشروط في SQLite(ص 69)
- النوع الأول: «الشرط البسيط»، وهو تعبير منطقي يتكون من مقارنة واحدة بين قيمتين، باستخدام عامل مقارنة واحد.
Simple Condition - المثال الذي يذكره الكتاب للشرط البسيط هو مقارنة السعر بالقيمة ثلاثين.
(price> 30) - وعوامل المقارنة التي يذكرها الكتاب في هذا الموضع هي.
(=، >، <، =>، =<، ><) - النوع الثاني: «الشرط المُركب»، ويتكون من شرطين أو أكثر يتم الربط بينهما باستخدام عوامل المنطق.
Compound Condition — (AND, OR)
- النوع الأول: المساواة، وعامله الشرطي علامة يساوي، ومثاله أن يكون السعر عشرين.
= → price = 20 - النوع الثاني: الاختلاف، وله عاملان شرطيان، ومثاله أن يكون السعر مختلفًا عن عشرين.
!= >< → price <> 20 price != 20 - النوع الثالث: أكبر من أو أصغر من، وعاملاه الشرطيان علامتا الأكبر والأصغر.
> < → price > 20 price < 20 - النوع الرابع: أكبر من أو يساوي، وأصغر من أو يساوي.
>= <= → price >= 20 price <= 20 - النوع الخامس: داخل النطاقات، ويحدد مجالًا بين قيمتين، والقيمتان داخلتان في المجال.
BETWEEN value1 AND value2 → price BETWEEN 10 AND 20 - النوع السادس: خارج النطاقات، وهو نفي السابق.
NOT BETWEEN value1 AND value2 → price NOT BETWEEN 10 AND 20 - النوع السابع: ضمن قائمة قيم، ويقبل الصف إن كانت قيمته إحدى قيم القائمة.
IN (value1, value2, value3, ...) → price IN (10,20,25) - النوع الثامن: خارج قائمة قيم.
NOT IN (value1, value2, value3, ...) → price NOT IN (10,20,25) - النوع التاسع: التحقق من القيم الفارغة.
IS NULL → title IS NULL - النوع العاشر: التحقق من القيم غير الفارغة، ويمكن ربط شرطين بعامل المنطق.
IS NOT NULL → title IS NOT NULL AND price IS NOT NULL - النوع الحادي عشر: يُطابق نمط جزئي نصي، ومثاله عنوان كتاب يبدأ بـ com.
LIKE 'pattern' → title LIKE ‘com%‘ - النوع الثاني عشر: لا يُطابق نمط جزئي نصي، ومثاله عنوان كتاب لا يبدأ بـ com.
NOT LIKE 'pattern' → title NOT LIKE ‘com%‘ - ورمزا النمط الجزئي: علامة النسبة المئوية تُمثل مجموعة أحرف مجهولة، والشرطة السفلية تُمثل حرفًا مجهولًا واحدًا.
% _


صيغة التعليمة البرمجية لإنشاء استعلامات SQLite في Python(ص 71)
- هذه هي صيغة التعليمة البرمجية لإنشاء استعلام، كما يرسمها شكل رقم (5-2).
cursor.execute (”SELECT column1, column2, ... FROM tabel_name WHERE condition_column = ?”, (condition_value,)) - الجزء الأول يُنفذ أمر SQL داخل قاعدة البيانات.
cursor.execute - ثم أمر SQL لاسترجاع البيانات.
SELECT - ثم أسماء الأعمدة المطلوب استرجاعها.
column1, column2, ... - ثم كلمة من، ويليها اسم الجدول.
FROM tabel_name - ثم كلمة الشرط، ويليها العمود المُستخدم في جملة الشرط.
WHERE condition_column - ثم علامة الاستفهام، وهي عُنصر مُؤقت يُسمى placeholder لقيمة الشرط.
= ? - ثم بعد الفاصلة قيمة الشرط داخل قوسين مع فاصلة بعدها.
(condition_value,)

- الخطوة الأولى: تحديد البيانات المطلوب استرجاعها، وأولها تحديد العمود أو الأعمدة المطلوب استرجاعها.
- وإذا لم يتم تحديد الأعمدة واستُخدم رمز النجمة، يتم استرجاع جميع قيم أعمدة الجدول.
* - ثم تحديد الشرط، أي المعيار، لتنفيذ الاستعلام بناءً عليه.
- وإذا لم يتم تحديد الشرط، أي بدون تعبير الشرط، فسيتم استرجاع جميع صفوف الجدول.
WHERE - الخطوة الثانية: كتابة التعليمات البرمجية، وهي ست تعليمات مرتبة: استدعاء المكتبة، ثم إنشاء أو فتح اتصال بقاعدة البيانات، ثم إنشاء كائن المؤشر، ثم استرجاع البيانات، ثم طباعة النتائج أي الصفوف، ثم إغلاق الاتصال.
sqlite3 - الخطوة الثالثة: تنفيذ التعليمات البرمجية.
- الخطوة الرابعة: معاينة النتائج، أي طباعة الصفوف في بيئة التطوير.
PyCharm
الاستعلام عن جميع بيانات الجدول — مثال 1(ص 72)
المطلوب في المثال الأول: تحديد جميع بيانات الجدول الذي اسمه بوك بقاعدة البيانات جريد إليفن بوكس.
book — grade11_booksالسطر الأول: استدعاء مكتبة إس كيو لايت ثري.
import sqlite3السطر الثاني تعليق يشير إلى فتح الاتصال بقاعدة البيانات.
# Connect to the databaseالسطر الثالث: إنشاء أو فتح اتصال بقاعدة البيانات.
connection = sqlite3.connect(‘grade11_books.db')السطر الرابع: إنشاء كائن المؤشر للتعامل مع قاعدة البيانات.
cursor = connection.cursor()السطر الخامس تعليق يشير إلى استرجاع البيانات.
# Data Retrievalالسطر السادس: تنفيذ الاستعلام، والتعليق بجانبه يبين أن النجمة تعني كل الحقول.
cursor.execute("SELECT * FROM book") #(*) means all fieldsالسطر السابع: استرجاع جميع السجلات، والتعليق بجانبه يبين أنها تُعاد قائمةً من tuples.
books=cursor.fetchall() # Fetches all records(books) As list of tuplesالسطر الثامن تعليق يشير إلى طباعة السجلات في أسطر منفصلة.
# print records in separate linesالسطران التاسع والعاشر: حلقة تكرارية تطبع كل صف.
for book in books: print(book)السطر الحادي عشر تعليق، والسطر الثاني عشر: إغلاق قاعدة البيانات.
#close database connection.close()
- تفسير سطر التنفيذ: النجمة بعد سيلكت تسترجع جميع الأعمدة من جدول بوك.
cursor.execute("SELECT * FROM book") - وعدم وجود عبارة الشرط يعني استرجاع جميع الصفوف المُخزنة في الجدول دون تصفية.
(WHERE) - تفسير سطر الجلب: تسترجع جميع النتائج الناتجة عن الاستعلام وتخزنها في متغير بوكس في الذاكرة.
books = cursor.fetchall() - ونوع المتغير بوكس قائمة تحتوي على صفوف، ويُمثل كل صف سجلًا من الجدول.
List — Tuples - تفسير الحلقة: تقوم الحلقة التكرارية بطباعة كل صف من النتائج في سطر مستقل.
for book in books: print(book) - وهذا ناتج تنفيذ التعليمة البرمجية، أي البيانات التي تم استرجاعها، الصف الأول.
(1, 'Arabic', 'Arabic SD', 2001, 'Art/Science', 1.5) - الصف الثاني.
(2, 'French', 'French SD', 2007, 'Art', 1.5) - الصف الثالث.
(3, 'English', 'English SD', 2009, 'Art/Science', 1.5) - الصفان الرابع والخامس.
(4, 'Mathematics', 'Mathematics SD', 2013, 'Science', 1.5) (5, 'Mathematics', 'Mathematics SD', 2013, 'Art', 1.5) - الصفان السادس والسابع.
(6, 'Principles of Geography and Economics\n', 'Social SD', 2016, 'Art', 1.5) (7, 'Psychology and sociology', 'Social SD', 2016, 'Art', 1.5) - الصفان الثامن والتاسع.
(8, 'Islamic History', 'Social SD', 2007, 'Art', 1.5) (9, 'Chemistry', 'Science SD', 2013, 'Science', 1.5) - الصفان العاشر والحادي عشر، ولاحظ أن سعر الفيزياء قيمة فارغة.
(10, 'Physics', 'Science SD', 2013, 'Science', None) (11, 'Biology', 'Science SD', 2013, 'Science', 1.5) - الصفان الثاني عشر والثالث عشر.
(12, 'Geology', 'Science SD', 2013, 'Science', 1.5) (13, 'ICT', 'ICT SD', 2025, 'Art/Science', 1.5) - الصفان الرابع عشر والخامس عشر، وبهما ينتهي الناتج.
(14, 'Quran', 'Islamic SD', 2003, 'Art/Science', 1.5) (15, 'Islamic Studies', 'Islamic SD', 2013, 'Art/Science', 1.5)
طرق استخدام دوال fetch(ص 74)

- الدالة الأولى تسترجع جميع الصفوف دفعة واحدة.
fetchall() - والدالة الثانية تسترجع عددًا محددًا من الصفوف حسب المعامل سايز.
fetchmany(size) - والدالة الثالثة تسترجع صفًا واحدًا فقط من النتائج في كل مرة.
fetchone() - الدالة فتش وان تُعيد النتائج على شكل تيوبل.
fetchone → tuple - والدالتان فتش ميني وفتش أول تعيدان النتائج على شكل ليست يحتوي على عناصر من نوع تيوبل، وكل تيوبل يُمثل صفًا من قاعدة البيانات.
fetchmany, fetchall → list of tuple - والدالة فتش أول قد تستهلك الكثير من الذاكرة إذا كانت النتائج كبيرة.
fetchall - لذلك عند التعامل مع عدد كبير من الصفوف، يُنصح باستخدام فتش ميني أو فتش وان داخل حلقة لتقليل استهلاك الذاكرة وتحسين الأداء.
fetchmany / fetchone - ودوال الجلب تجلب البيانات فعليًا إلى بايثون بعد تنفيذ الاستعلام باستخدام الأمر سيلكت.
SELECT - وعند استخدام التعليمات التالية يتم حفظ جميع الصفوف المُسترجعة في متغير، وهذه صورتها الأولى كما طبعها الكتاب.
variable_name = cursor.fechall() - وصورتها الثانية.
variable_name = cursor.fetchmany(size) - وصورتها الثالثة.
variable_name = cursor.fetchone()
الاستعلام عن عمود واحد أو أكثر لجميع الصفوف — مثال 2(ص 75)
المطلوب في المثال الثاني: تحديد بيانات عمودي العنوان والسعر لجميع صفوف الجدول بوك بقاعدة البيانات.
title, price — book — grade11_books.dbالأسطر الأولى كما في المثال السابق: استدعاء المكتبة، ثم فتح الاتصال، ثم إنشاء المؤشر.
import sqlite3 / connection = sqlite3.connect('grade11_books.db') / cursor = connection.cursor()والفرق كله في سطر الاستعلام: نضع اسمي العمودين بدل النجمة.
cursor.execute("SELECT title, price FROM book")ثم نسترجع جميع الصفوف كالمعتاد.
books=cursor.fetchall()ثم الحلقة التكرارية للطباعة، ثم إغلاق قاعدة البيانات.
for book in books: print(book) connection.close()التفسير: تنفيذ استعلام إس كيو إل لاسترجاع عمودين فقط من جدول بوك، وهما عنوان الكتاب وسعر الكتاب.
SELECT title, price FROM bookويتم تخزين النتائج في متغير بوكس على شكل قائمة عناصرها تيوبلز، وكل تيوبل يمثل صفًا، أي كتابًا، يحتوي على قيمتي العنوان والسعر فقط.
list of tuplesوهذا ناتج البرنامج، أول صفين.
('ICT', 1.5) ('Arabic', 1.5)ثم الصفان الثالث والرابع، ولاحظ أن سعر الإنجليزي قيمة فارغة.
('English', None) ('French', 1.5)ثم الصفان الخامس والسادس.
('Chemistry', None) ('Islamic Studies', 1.5)
الاستعلام عن بيانات بناءً على شرط محدد — مثال 3(ص 77)
المطلوب في المثال الثالث: تحديد بيانات الصفوف، أي الكتب، وفق شرط أنها طُبعت بعد عام ألفين وعشرة، من جدول بوك.
WHERE year > 2010الأسطر الأولى نفسها: استدعاء المكتبة، ثم فتح الاتصال، ثم إنشاء المؤشر.
import sqlite3 / connection = sqlite3.connect(‘grade11_books.db') / cursor = connection.cursor()وسطر الاستعلام هنا فيه إضافة الشرط، وعلامة الاستفهام عنصر مؤقت تُمرَّر قيمته بعد الفاصلة.
cursor.execute("SELECT * FROM book WHERE year>?",(2010,))ثم استرجاع الصفوف، ثم الحلقة التكرارية للطباعة، ثم إغلاق قاعدة البيانات.
books=cursor.fetchall() for book in books: print(book) connection.close()التفسير: تُستخدم النجمة بعد سيلكت لاسترجاع جميع الأعمدة وفقًا لشرط الاستعلام.
SELECT *وتُستخدم عبارة الشرط لتحديد شرط الاستعلام بحيث يتم استرجاع الصفوف الخاصة بالكتب التي تم طباعتها بعد عام ألفين وعشرة فقط، فقد استُبدلت علامة الاستفهام بالقيمة.
WHERE year > 2010ثم تُسترجع جميع الصفوف المطابقة للشرط السابق وتُخزن في المتغير بوكس، والنتيجة قائمة تحتوي على تيوبلز، كل تيوبل يُمثل صف كتاب بجميع أعمدته.
books = cursor.fetchall()وهذا ناتج البرنامج، الصف الأول.
(1, 'ICT', 'ICT SD', 2025, 'Art/Science', 1.5)والصف الثاني.
(5, 'Chemistry', 'Science SDn', 2013, 'Science', None)والصف الثالث.
(6, 'Islamic Studies', 'Islamic SD', 2013, 'Art/Science', 1.5)
الملخص
- الاستعلام عملية رئيسية في إدارة قواعد البيانات، تُستخدم لتصفية (اختيار / استرجاع) البيانات وفق شروط ومعايير محددة.
- الشروط في SQLite هي التعبيرات المنطقية Logical Expressions التي تحدد الصفوف التي يجب التعامل معها عند الاسترجاع أو الحذف أو التحديث.
- الشرط البسيط مقارنة واحدة بين قيمتين بعامل مقارنة واحد، والشرط المركب شرطان أو أكثر يُربط بينهما بـ AND أو OR.
- من العوامل الشرطية: = و != و >< و > و < و >= و <= و BETWEEN و NOT BETWEEN و IN و NOT IN و IS NULL و IS NOT NULL و LIKE و NOT LIKE، و% تُمثل مجموعة أحرف مجهولة و_ تُمثل حرف مجهول.
- القيمة NULL تعني عدم وجود قيمة، وهي ليست صفر (0) ولا سلسلة نصية فارغة ("").
- صيغة الاستعلام: cursor.execute(”SELECT column1, column2, ... FROM tabel_name WHERE condition_column = ?”, (condition_value,)).
- استخدام الرمز * يسترجع جميع الأعمدة، وترك عبارة WHERE يسترجع جميع الصفوف.
- دوال fetch ثلاث: fetchall() لجميع الصفوف دفعة واحدة، وfetchmany(size) لعدد محدد، وfetchone() لصف واحد في كل مرة؛ وfetchone تُعيد tuple بينما تُعيد الأخريان list من tuples.
- fetchall قد تستهلك الكثير من الذاكرة إذا كانت النتائج كبيرة، فيُنصح عند العدد الكبير باستخدام fetchmany أو fetchone داخل حلقة.
- تُطبع نتائج الاستعلام بحلقة تكرارية، فيظهر كل صف في سطر مستقل.
الأفكار الرئيسية
- الاستعلام = اختيار أعمدة (SELECT) + من جدول (FROM) + وفق شرط اختياري (WHERE)؛ فإن غاب الشرط عادت كل الصفوف، وإن وُضعت النجمة عادت كل الأعمدة.
- الشرط تعبير منطقي، وقوته من العوامل الشرطية: مقارنة، أو نطاق، أو قائمة قيم، أو فحص فراغ، أو مطابقة نمط نصي.
- تنفيذ الاستعلام شيء وجلب نتائجه شيء آخر: execute تُنفذ، ودوال fetch هي التي تجلب البيانات فعليًا إلى Python.
الأسئلة المهمة
عرّف الاستعلام Database Query كما ورد في الكتاب.
هو أحد العمليات الرئيسية في إدارة قواعد البيانات، ويُستخدم لتصفية (اختيار / استرجاع) البيانات وفق شروط ومعايير محددة.
الكتاب صفحة 69
ما المقصود بالشروط في SQLite؟ وفيمَ تُستخدم؟
هي التعبيرات المنطقية Logical Expressions التي تُستخدم لتحديد الصفوف التي يجب التعامل معها عند تنفيذ أوامر مثل (الاسترجاع، الحذف، التحديث) على قاعدة البيانات.
الكتاب صفحة 69
قارن بين الشرط البسيط Simple Condition والشرط المركب Compound Condition.
الشرط البسيط تعبير منطقي يتكون من مقارنة واحدة بين قيمتين، مثل (price> 30)، باستخدام عامل مقارنة واحد مثل (=، >، <، =>، =<، ><). أما الشرط المركب فيتكون من شرطين أو أكثر يتم الربط بينهما باستخدام عوامل المنطق (AND, OR).
الكتاب صفحة 69
علّل: لا يصح فحص القيم الفارغة بكتابة price = NULL.
لأن NULL تشير إلى «عدم وجود قيمة» وهي ليست صفر (0) ولا سلسلة نصية فارغة ("")، فلا تصح مقارنتها بعامل المساواة؛ والعامل الشرطي المخصص لذلك هو IS NULL، ولنفيه IS NOT NULL.
الكتاب صفحة 71
اكتب صيغة التعليمة البرمجية لإنشاء استعلام في SQLite داخل Python، وبيّن وظيفة العنصر المؤقت فيها.
الصيغة: cursor.execute (”SELECT column1, column2, ... FROM tabel_name WHERE condition_column = ?”, (condition_value,)). والعنصر المؤقت placeholder هو علامة الاستفهام (?)، وهو موضع مؤقت لقيمة الشرط تُمرَّر بعد الفاصلة في (condition_value,).
الكتاب صفحة 71
ماذا يحدث إذا كتبنا الاستعلام دون تحديد الأعمدة (باستخدام *) ودون تعبير WHERE؟
إذا لم يتم تحديد الأعمدة واستُخدم الرمز *، يتم استرجاع جميع قيم أعمدة الجدول؛ وإذا لم يتم تحديد الشرط (بدون تعبير WHERE)، فسيتم استرجاع جميع صفوف الجدول. أي تعود كل بيانات الجدول.
الكتاب صفحة 71
قارن بين دوال fetch الثلاث من حيث ما تسترجعه ونوع ما تُعيده.
fetchall() تسترجع جميع الصفوف دفعة واحدة، وfetchmany(size) تسترجع عددًا محددًا من الصفوف حسب المعامل size، وfetchone() تسترجع صفًا واحدًا فقط من النتائج في كل مرة. وfetchone تُعيد النتائج على شكل tuple، بينما fetchmany وfetchall تعيدان النتائج على شكل list يحتوي على عناصر من نوع tuple (كل tuple يمثل صفًا من قاعدة البيانات).
الكتاب صفحة 74
علّل: يُنصح باستخدام fetchmany أو fetchone داخل حلقة عند التعامل مع عدد كبير من الصفوف.
لأن الدالة fetchall قد تستهلك الكثير من الذاكرة إذا كانت النتائج كبيرة، فاستخدام fetchmany أو fetchone داخل حلقة يقلل استهلاك الذاكرة ويحسّن الأداء.
الكتاب صفحة 74
اختبار الدرس
أجب ثم اضغط «صحّح» لترى درجتك وتفسير كل إجابة.
الواجب
أسئلة تطبيقية لتحلها في البيت. يمكنك طباعتها من الأعلى.
مصطلحات الدرس
- الاستعلام Database Query
- أحد العمليات الرئيسية في إدارة قواعد البيانات، يُستخدم لتصفية (اختيار / استرجاع) البيانات وفق شروط ومعايير محددة.
- التعبيرات المنطقية Logical Expressions
- الشروط التي تُستخدم لتحديد الصفوف التي يجب التعامل معها عند تنفيذ أوامر مثل الاسترجاع والحذف والتحديث على قاعدة البيانات.
- الشرط البسيط Simple Condition
- تعبير منطقي يتكون من مقارنة واحدة بين قيمتين، مثل (price> 30)، باستخدام عامل مقارنة واحد.
- الشرط المُركب Compound Condition
- شرط يتكون من شرطين أو أكثر يتم الربط بينهما باستخدام عوامل المنطق (AND, OR).
- NULL
- قيمة تشير إلى «عدم وجود قيمة»، وهي ليست صفر (0) أو سلسلة نصية فارغة ("").
- SELECT
- أمر SQL لاسترجاع البيانات من الجدول.
- WHERE
- التعبير الذي يحدد شرط الاستعلام؛ وبدونه تُسترجع جميع صفوف الجدول.
- fetchall() / fetchmany(size) / fetchone()
- دوال جلب النتائج: الأولى تسترجع جميع الصفوف دفعة واحدة، والثانية تسترجع عددًا محددًا من الصفوف حسب المعامل size، والثالثة تسترجع صفًا واحدًا فقط من النتائج في كل مرة.
- LIKE و % و _
- عامل مطابقة نمط جزئي نصي؛ و% تُمثل مجموعة أحرف مجهولة، و_ تُمثل حرف مجهول.
تمارين الكتاب كاملة
كل سؤال ونشاط وتمرين ورد في صفحات هذا الدرس، بنصه وإجابته النموذجية. 2 تمرينًا.
ورقة عمل (6) — الاستعلام عن جميع البيانات من الجدول landmark بقاعدة البيانات Kuwait_landmarks.dbالاستعلام عن جميع البيانات من الجدول landmark بقاعدة البيانات Kuwait_landmarks.db مستخدمًا التعليمة fetchall، متبعًا الخطوات التالية: 1. استدعِ المشروع landmark_select. 2. افتح ملف data_select1.py (الأسطر المطبوعة: import sqlite3 ثم # Connect to the database ثم connection = sqlite3.connect('Kuwait_landmarks.db') ثم cursor = connection.cursor() ثم # Data Retrieval ثم cursor.execute( ) وبداخله فراغ ثم rows = cursor.fetchall() ثم for row in rows: والسطر بعده متروك فراغًا ثم # Close the database ثم connection.close()). 3. استكمل التعليمات البرمجية لتنفيذ التالي: استعلم عن جميع صفوف الجدول. اطبع الصفوف التي تم استرجاعها (الاستعلام عنها). 4. نفذ التعليمات البرمجية. 5. عاين نتائج الاستعلام: عدد الصفوف: ...........................................(ص 79)
يُملأ فراغ سطر التنفيذ بأمر استرجاع كل الأعمدة من الجدول landmark على نمط مثال 1: cursor.execute("SELECT * FROM landmark"). ويُملأ السطر الفارغ داخل الحلقة بتعليمة الطباعة مع إزاحة: print(row). فتصير التعليمات: import sqlite3 / connection = sqlite3.connect('Kuwait_landmarks.db') / cursor = connection.cursor() / cursor.execute("SELECT * FROM landmark") / rows = cursor.fetchall() / for row in rows: print(row) / connection.close(). وبما أن الاستعلام بلا تعبير WHERE فسيتم استرجاع جميع صفوف الجدول، وتُطبع كل صف في سطر مستقل على شكل tuple يحتوي على جميع أعمدة الجدول. أما خانة «عدد الصفوف» فيكتب فيها الطالب العدد الذي ظهر فعلًا عنده في نافذة PyCharm، وهو عدد الصفوف التي أدخلها في الجدول landmark في ورقتي العمل (4) و(5) من الدرس السابق: صف واحد من ورقة العمل (4) وثلاثة صفوف من ورقة العمل (5)، أي أربعة صفوف إن نُفِّذت الورقتان مرة واحدة.
ورقة عمل (7) — الاستعلام عن بيانات محددة من الجدول landmark بقاعدة البيانات Kuwait_landmarks.dbالاستعلام عن بيانات محددة من الجدول landmark بقاعدة البيانات Kuwait_landmarks.db مستخدمًا التعليمة fetchall، متبعًا الخطوات التالية: 1. استدعِ المشروع landmark_select. 2. افتح ملف data_select2.py (الأسطر المطبوعة: import sqlite3 ثم # Connect to the database ثم connection = sqlite3.connect('Kuwait_landmarks.db') ثم cursor = connection.cursor() ثم # Data Retrieval ثم cursor.execute( ) وبداخله فراغ ثم # Fetch the Data وبعده سطر فارغ ثم # Output the Data وبعده سطر فارغ ثم # Close the database ثم connection.close()). 3. استكمل التعليمات البرمجية اللازمة لتنفيذ الاستعلامات التالية: استعلم عن عمودي (اسم مَعلم الكويت name، وسنة الإنشاء year) لجميع صفوف المعالم الثقافية Cultural فقط. استخدم دالة fetchall() لاسترجاع البيانات وتخزينها في متغير records. اكتب التعليمة البرمجية للحلقة التكرارية للمتغير records لطباعة كل صف في سطر منفصل. 4. نفذ التعليمات البرمجية. 5. عاين نتائج الاستعلام.(ص 80)
يُملأ فراغ سطر التنفيذ باستعلام يحدد عمودين مع شرط على العمود category، على نمط مثالي 2 و3: cursor.execute("SELECT name, year FROM landmark WHERE category = ?", ('Cultural',)). ويُملأ السطر الذي تحت التعليق # Fetch the Data بـ: records = cursor.fetchall(). ويُملأ السطران اللذان تحت التعليق # Output the Data بالحلقة التكرارية: for record in records: ثم بإزاحة print(record). فتصير التعليمات: import sqlite3 / connection = sqlite3.connect('Kuwait_landmarks.db') / cursor = connection.cursor() / cursor.execute("SELECT name, year FROM landmark WHERE category = ?", ('Cultural',)) / records = cursor.fetchall() / for record in records: print(record) / connection.close(). والناتج المتوقع: يُطبع لكل معلم ثقافي سطر مستقل على شكل tuple من قيمتين فقط هما الاسم وسنة الإنشاء، مثل ('اسم المَعلم', سنة الإنشاء)؛ ولا يظهر أي صف قيمته في العمود category غير Cultural. وإن كانت البيانات المدخلة في ورقتي العمل (4) و(5) هي وحدها الموجودة، فلن يُطبع شيء لأن قيم category فيها كانت Culture وHistorical Landmark وTraditional Market وArt Museum ولا يوجد فيها Cultural؛ ويكفي الطالب حينئذ أن يذكر ذلك عند معاينة النتائج، أو يستعلم بقيمة العمود كما أدخلها فعلًا.
صفحات الكتاب
صفحات هذا الدرس من كتاب الطالب الرسمي كما هي، صفحات 67 إلى 80.













