بايثونطريقة التعامل مع قواعد البيانات بأفضل أسلوب ممكن
المثال التالي يعلمك طريقة التعامل مع قواعد البيانات بأفضل أسلوب ممكن لضمان أن لا يحدث أي خطأ يؤدي إلى إيقاف البرنامج بشكل مفاجئ.
فعلياً، سنضع كل كود يمكن أن يسبب خطأ بداخل بلوك try.. except
.
لحفظ أي معلومات تم إضافتها، تعديلها أو مسحها من أي جدول في قاعدة البيانات، يجب استدعاء الدالة commit()
لحفظ التغيرات. و لإلغاء تنفيذ أي إستعلام تم إرساله، يجب استدعاء الدالة rollback()
و هي ستقوم بشكل تلقائي بإلغاء كل التغيرات التي تم فعلها في آخر استعلام تم إرساله.
في المثال التالي قمنا تعمدنا كتابة إستعلام منطقياً لا يمكن أن يتنفذ حيث أننا سنحاول حذف كل معلومات الموظف الذي يملك رقم id
يساوي 1000 في الجدول employee
.
ملاحظة: نحن نعلم أن هذا الإستعلام لا يمكن أن يتنفذ لأنه لا يوجد موظف يملك id
يساوي 1000.
مثال
# mysql.connector هنا قمنا بتضمين كل محتوى الموديول import mysql.connector try: # MySQL حتى ترجع كائن يسمح لنا بالإتصال بقواعد بيانات connect() هنا قمنا باستدعاء الدالة # لأنه يوجد إحتمال أن يحدث خطأ أثناء الإتصال بخادم قاعدة البيانات try قمنا باستدعاء هذه الدالة بداخل بلوك db = mysql.connector.connect( user='root', passwd='', host='localhost', database='company' ) except: # exit(0) في حال حدوث خطأ في الإتصال, سيتم تنفيذ أمر الطباعة التالي و من ثم إيقاف عمل البرنامج بسبب الدالة print("Error: Can't connect to database") exit(0) # يسمح لنا بالتعامل مع قاعدة البيانات cursor لإنشاء كائن cursor() هنا قمنا باستدعاء الدالة cursor = db.cursor() # 'employee' وضعنا فيه نص الإستعلام الذي يقضي بحذف سطر واحد من الجدول sql المتغير sql = 'DELETE FROM employee WHERE ID = %s' # sql يمثل المعلومات التي سيتم دمجها مع الإستعلام الذي قمنا بتجهيزه في الكائن tuple عبارة عن val الكائن val = ('1000',) try: # لحفظ أي تغيرات يتم إجراءها commit() لإرسال الإستعلام إلى قاعدة البيانات. و استدعينا الدالة execute() هنا قمنا باستدعاء الدالة # يساوي 1000 id لأنه قد يحدث خطأ في حال عدم وجود موظف يملك رقم try قمنا بوضع هاتين الدالتين بداخل بلوك cursor.execute(sql, val) db.commit() except: # في حال حدوث خطأ أثناء تنفيذ الإستعلام, سيتم طباعة أنه قد حدث خطأ # لإلغاء أي شيء حدث في قاعدة البيانات بعد محاولة تنفيذ الإستعلام rollback() قمنا باستدعاء الدالة print("Error: unable to delete a record") db.rollback() # هنا قمنا بطباعة عدد الأسطر التي تم حذفها من الجدول بسبب الإستعلام الذي تم إرساله سابقاً print(cursor.rowcount, 'record(s) deleted') # هنا قمنا بإغلاق الإتصال مع قاعدة البيانات cursor.close() db.close()
النتيجة: سيحدث خطأ سببه عدم وجود موظف يملك رقم id
يساوي 1000 في الجدول employee
لكنه لن يؤدي إلى إيقاف البرنامج و لن يسبب أي مشكلة في قاعدة البيانات و سيتم طباعة عدد الأسطر التي تم حذفها كالتالي.