التعامل مع قواعد البيانات MySQL في بايثون
أكتسبت قاعدة ألبيانات MySQL شهرتها في الوسط ألبرمجي لأنتشارها ألواسع بين المطورين لما تقدمه من سهولة في الأستخدام وميزتها في سرعة ألوصول ألى ألبيانات،والأكثر أهمية أنها مجانية ومفتوحة ألمصدر،كما وتتميز بأمكانية عملها على منصات عديدة وتم دعمها من أغلب ألشركات العالمية ألشهيرة والميزة ألتي يبحث عنها ألكثيرين أنها آمنة.
بصورة عامة يتم تخزين ألبيانات في قواعد بيانات MySQL بصورة جداول tables، حيث يتكون كل جدول من أعمدة Columns وصفوف Rows،ويمكن أيضاً ربط هذه الجداول فيما بينها من خلال دوال functions للتعامل مع ألبيانات فيما بينها.
في هذا الدرس سنتعلم كيفية ألتعامل مع قاعدة بيانات MySQL مع اللغة الرائعة بايثون،وسنرى كيفية أنشاء الجداول وتخزين البيانات فيها،أضافة سنرى كيفية قراءة هذه البيانات وأستيرادها من قاعدة البيانات ألتي تم خزنها فيها.
ألخطوة الأولى يجب تنزيل السيرفر ألخاص بقاعدة البيانات وتثبيته على حاسوبنا ليكون السيرفر المحلي Local server الخاص بنا ألذي سنستعمله لأنشاء قواعد البيانات ألتي نريدها وأجراء كافة العمليات ألتي يتطلبه منا هذا الدرس.
تنزيل وتثبيت سيرفر MySQL:
-نذهب ألى الرابط التالي https://dev.mysql.com/downloads/mysql/ لتظهر لدينا الصفحة الخاصة بتحميل MySQL Community Server،ألذي سنقوم بتنزيله،أختر نوع ألنظام المثبت على حاسوبك بالنسبة لي نظام حاسوبي هو windows لذلك اخترته وبعدها أضغط على Go to Download Page كما في الصورة الآتية:
-بعد ذلك ستقوم بتثبيت الملف الذي عند تشغيله سيقوم بتثبيت المكونات الضرورية للسيرفر، وأهم مكونين لدينا هو MySQL Server و MySQL Workbench اللذان نحتاجهما.
ملاحظة: أثناء عملية التثبيت سيطلب منك أدخال كلمة سر Password خاص بالدخول الى السيرفر،لاتنسى هذه كلمة السر لاننا سنحتادجه عند تنفيذ الكود البرمجي،أي ستكون المعلومات التالية ألتي سنحتاجها:
User:root
Password: ألذي قمت باختيارها
الخطوة التالية سنقوم بفتح برنامج MySQL Workbench ألذي قمنا بتنزيله وتثبيته على حاسوبنا وألتي ستكون واجهته بهذا الشكل:
يجب عمل الأتصال بالسيرفر وذلك عن طريق الضغط على Local instance MySQL80 الموجوده في أسفل يسار كمل موضحة في الصورة أعلاه.
ستظهر نافذة يطلب مننا أدخال كلمة السر password ألذي قمنا بأنشائه أثناء عملية التثبيت.
بعد أكمال عملية الأتصال بالسيرفر،الآن لنذهب لبرنامج Pycharm لتنفيذ الكود البرمجي بأستخدام لغة بايثون ألرائعة،وأول خطوة نقوم بعملها هي تثبيت المكتبات الضرورية لعمل قاعدة بيانات MySQL
من خلال File>Settings>Project Interpreter>click on + sign
وهذه المكتبات هي:
Mysql-connector
Mysql-connector-python
بعد أكمال عملية تثبيت هذه المكتبات المهمة،نتوجه لكتابة أول كود لنا بواسطة لغة بايثون وألذي سيكون بمثابة أختبار للسيرفر للتأكد من عمله بصورة صحيحة.
import mysql.connector
mydata_base = mysql.connector.connect(
host="localhost",
user="root",
passwd="1234",
)
print(mydata_base)
قمنا بأستدعاء مكتبة mysql.connector التي تقوم بعملية الأتصال بالسيرفر،بعد ذلك تم أنشاء متغير وهو mydata_base ألذي سيمثل قاعدة البيانات الخاصة بنا وسيحتوي بداخله معلومات السيرفر (host,user,password).
ملاحظة: يجب أدخال كلمة السر password نفسها ألتي قمنا بأنشاءها أثناء عملية تثبيت السيرفر.
قمنا بأستخدام أيعاز الطباعة print للتأكد من نجاح عملية الأتصال بالسيرفر،وعند تنفيذ البرنامج اذا ظهرت الرسالة الآتيه معناه نجاح عملية الأتصال بالسيرفر الخاص بنا.
<mysql.connector.connection.MySQLConnection object at 0x018EE658>
أنشاء أول قاعدة بيانات بأستخدام لغة بايثون:
ذكرنا في بداية ألدرس أنه يتم تخزين البيانات في قاعدة ألبيانات MySQL بصورة جداول، حيث يتكون كل جدول من أعمدة Columns وصفوف Rows. والآن لنأتي لأنشاء أول قاعدة بيانات لنا بواسطة لغة بايثون الرائعة.
()mycoursor = mydata_base.cursor("mycoursor.execute("CREATE DATABASE College
بعد ماقمنا بتهيئة الأتصال بقاعدة البيانات،الآن نقوم بعمل الوسيط بين قاعدة البيانات والبيانات ألتي سندخلها،وهذا الوسيط هو mycoursor ألذي من خلال الأيعاز execute ،سنقوم بأنشاء أول قاعدة بيانات لنا ألتي أسميناها College.عند تنفيذ البرنامج أذا لم يظهر لدينا أي خطأ،معنى ذلك تم أنشاء أول قاعدة بيانات لنا بنجاح.
والآن لنقوم بتعديل بسيط على الكود لكي نظهر قاعدة بيانات College ألتي قمنا بأنشاءها للتأكد من وجودها من خلال الكود التالي:
()mycoursor = mydata_base.cursor("mycoursor.execute("SHOW DATABASES:for database in mycoursor(print(database
عند تنفيذ هذا الكود ستظهر لدينا كل قواعد البيانات ألتي قمنا بأنشاءها مسبقاً،وبالطبع من ضمنها Colege.
('college',)
انشاء أول جدول table في قاعدة البيانات:
سنقوم بأنشاء أول جدول table لنا من خلال كود بايثون،لكن عند تهيئة الأتصال بالسيرفر نحتاج أولاً أن نخبر السيرفر بأي قاعدة بيانات نريد أن نتصل،وبالتأكيد سنقوم بلأتصال بقاعدة بيانات College ألتي قمنا بأنشاءها مسبقاً.
لذلك سيكون الكود بالشكل ألتالي:
)mydata_base = mysql.connector.connect,"host="localhost,"user="root,"passwd="2028"database="College(()mycoursor = mydata_base.cursor("((mycoursor.execute("CREATE TABLE students (name VARCHAR(255), age INTEGER(10
نلاحظ في بداية الكود تم أضافة database=”College” لنخبر السيرفر أننا نريد الأتصال بقاعدة بيانات College.
والسطر الأخير قمنا بأنشاء جدول students ألذي يحتوي على عنصرين وهما name ونوعه varchar وأقصى سعة له هي 255، و age ونوعه integer وأقصى سعة له هي 10.وعند تنفيذ الكود سيكون قد تم أنشاء الجدول بنجاح.
أذا أردنا أظهر ألجدول ألذي قمنا بأنشاءه،يمكننا ذلك عن طريق تنفيذ الكود التالي:
mycoursor = mydata_base.cursor()
mycoursor.execute("SHOW TABLES")
for tables in mycoursor:
print(tables)
حيث سيظهر لدينا:
('students',)
والآن لنتعلم كيفية أضافة بعض البيانات للجدول students.
أضافة ألبيانات الى ألجدول table:
mycoursor = mydata_base.cursor()
sqlformula = "INSERT INTO students (name, age) VALUES (%s, %s)"
student1 = ("Ahmed", 20)
mycoursor.execute(sqlformula, student1)
mydata_base.commit()
سنقوم بأضافة عمودين للجدول وهما name و age، وهذا سيتم من خلال السطر الثاني sqlformula حيث يتم أضافتهما و %s تسمى place-holder معناها يمكن أضافة اي قيمة نرغب بيها فيما بعد،حيث نلاحظ في السطر التالي تم أنشاء متغير student1 ألذي يحتوي على معلومات الطالب الأول وهي ahmed,20 (الأسم والعمر).
يتم بعد ذلك تنفيذ أوامر هذه الأضافة الى قاعدة البيانات،والسطر الأخير لدينا commit() ومعناها أننا يجب أن نخبر قاعدة البيانات أن هناك أضافة جديدة للبيانات ويجب تغيير البيانات القديمة ألى التغيير الجديد فيها.بعد ذلك يتم تنفيذ هذا الكود وسيتم أضافة البيانات بنجاح.
ماذا لو كان لدينا أكثر من طالب ونريد اضافتهم جميعاً الى قاعدة البيانات؟
يمكن أضافة ألعديد من الطلاب الى قاعدة البيانات التي لدينا من خلال الكود التالي:
sqlformula = "INSERT INTO students (name, age) VALUES (%s, %s)"
students = [("Ahmed", 20),
("Ali", 25),
("Noor", 22),
("Saif", 25),
("Shatha", 19)]
mycoursor.executemany(sqlformula, students)
mydata_base.commit()
حيث نلاحظ تم أنشاء قائمة List أسميناها students تحتوي على معلومات الطلاب، وفي السطر ألذي يليه، نلاحظ هناك تم تغيير الكود الخاص بالتنفيذ وأصبح ()excutemany،أي يعني قم بتنفيذ المعلومات العديدة ألتي أصبحت لدينا.
والآن لنتعلم كيفية جلب أو أستيراد البيانات من قاعدة البيانات الخاصة بنا.
جلب البيانات من قاعدة البيانات:
سنقوم بجلب البيانات ألتي أنشأناها في الجدول students حيث يتم عرضها لدينا من خلال كود بايثون في محرر الأكواد:
mycoursor = mydata_base.cursor()
mycoursor.execute("SELECT * FROM students")
result = mycoursor.fetchall()
for rows in result:
print(rows)
السطر الثاني من الكود نلاحظ جملة SELECT * FROM students، ومعنى هذه الجملة هو جلب جميع البيانات من الجدول students حيث تعني العلامة * جميع.
بعد ذلك يتم تنفيذ الأيعاز fetchall() يعني أجلب جميع البيانات من قاعدة البيانات وتم عمل عداد لتعداد وطباعة البيانات.عند تنفيذ هذا الكود سوف يظهر لدينا:
('Ahmed', 20)
('Ali', 25)
('Noor', 22)
('Saif', 25)
('Shatha', 19)
لو أردنا أن نقوم بجلب بيانات محددة،أي أننا لانريد جميع ألبيانات أن نستوردها،فمثلاً لو أردنا جلب البيانات ألخاصة بالعمر فقط،فيمكننا ذلك عن طريق الكود التالي في بايثون:
mycoursor.execute("SELECT age FROM students")
result = mycoursor.fetchall()
for rows in result:
print(rows)
حيث نلاحظ في العبارة SELECT age FROM student،أي أننا ححدنا أن نجلب age فقط،وعند تنفيذ الكود سنلاحظ ظهور الأعمار ألخاصة بالطلاب فقط:
(20,)
(20,)
(25,)
(22,)
(25,)
(19,)
الأستعلام في قواعد ألبيانات:
تكلمنا في موضوع جلب ألبيانات من قواعد ألبيانات وأوضحنا أننا يمكننا جلب بيانات محددة نحن نحتاجها هي فقط،وليس كل ألبيانات، هنا في موضوع الأستعلام عن قواعد البيانات يمكننا أن نخصص المعلومات التي نريد جلبها،أي يعني يمكننا أضافة شروط لجلب ألبيانات تسمح لنا بتفصيل هذا ألعمل.
لنرى هذا في ألكود التالي:
mycoursor.execute("SELECT * FROM students WHERE age=25")
result = mycoursor.fetchall()
for rows in result:
print(rows)
لنأتي ألى شرح عبارة الأستعلام مباشرةً. في جملة SELECT * FROM students WHERE age=25,هنا حددنا ألبيانات ألتي نريدها،ومعنى هذه الجملة أجلب لي جميع ألبيانات من قاعدة ألبيانات students ألتي يكون فيها ألعمر يساوي 25.
لنقوم بتنفيذ هذا الكود ولنرى ماهي ألبيانات ألتي تم جلبها:
('Ali', 25)
('Saif', 25)
نلاحظ أنه تم جلب أسماء ألطالبين Ali و Saif وكلاهما أعمارهما 25.
ألى هنا وصلنا ألى نهاية هذا ألدرس وأتمنى أن اكون قد وفقت في طرحه وتوضيحه للجميع،وأي سؤال أو أستفسار فيمكنكم تركه لي في خانة ألتعليقات ألموجودة في الأسفل،ودمتم في أمان الله وحفظه.
شكراً لكم.
م.م رسول حسن
تعليقات
إرسال تعليق