يمكنك اختيار قاعدة البيانات الصحيحة للتطبيق الخاص بك. يدعم Python Database API مجموعة واسعة من خوادم قواعد البيانات مثل -
- GadFly
- mSQL
- MySQL
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Oracle
- Sybase
فيما يلي قائمة بواجهات قاعدة بيانات بايثون Python المتاحة: واجهات قاعدة بيانات بايثون Python وواجهات برمجة التطبيقات. يجب عليك تنزيل وحدة API DB منفصلة لكل قاعدة بيانات تحتاج إلى الوصول إليها. على سبيل المثال ، إذا كنت بحاجة إلى الوصول إلى قاعدة بيانات Oracle وكذلك قاعدة بيانات MySQL ، فيجب عليك تنزيل كل من وحدات قاعدة بيانات Oracle و MySQL.
يوفر DB API الحد الأدنى من المعايير للعمل مع قواعد البيانات باستخدام بيثون بناء الجملة والبناء كلما كان ذلك ممكنا. يتضمن API هذا ما يلي -
- استيراد وحدة API.
- الحصول على اتصال مع قاعدة البيانات.
- إصدار عبارات SQL والإجراءات المخزنة.
- إغلاق الاتصال
سنتعلم جميع المفاهيم باستخدام MySQL ، لذلك دعونا نتحدث عن وحدة MySQLdb.
What is MySQLdb? ماهي قاعدة البيانات
MySQLdb هي واجهة للاتصال بخادم قاعدة بيانات MySQL من بيثون. وهي تنفذ الإصدار 2.0 من Python Database API وهي مبنية على واجهة MySQL C API.
تحميل قاعدة البيانات How do I Install MySQLdb?
قبل المتابعة ، تأكد من تثبيت MySQLdb على جهازك. فقط اكتب ما يلي في البرنامج النصي بايثون Python وقم بتنفيذه -
#!/usr/bin/python
import MySQLdb
إذا كان ينتج النتيجة التالية ، فهذا يعني أن وحدة MySQLdb غير مثبتة -
Traceback (most recent call last):
File "test.py", line 3, in
import MySQLdb
ImportError: No module named MySQLdb
لتثبيت وحدة MySQLdb ، استخدم الأمر التالي -
For Ubuntu, use the following command -
$ sudo apt-get install python-pip python-dev libmysqlclient-dev
For Fedora, use the following command -
$ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
For Python command prompt, use the following command -
pip install MySQL-python
ملاحظة - تأكد من حصولك على امتياز الجذر لتثبيت الوحدة أعلاه.
Database Connection الاتصال في قاعدة البيانات
قبل الاتصال بقاعدة بيانات MySQL ، تأكد من ما يلي -
- لقد قمت بإنشاء قاعدة بيانات TESTDB.
- قمت بإنشاء جدول الموظف في TESTDB.
يحتوي هذا الجدول على حقول FIRST_NAME و LAST_NAME و AGE و SEX و INCOME.
يتم تعيين معرف المستخدم "testuser" وكلمة المرور "test123" للوصول إلى TESTDB.
تم تثبيت Python module MySQLdb بشكل صحيح على جهازك.
لقد مررت ببرنامج MySQL التعليمي لفهم أساسيات MySQL.
مثال Example
فيما يلي مثال الاتصال بقاعدة بيانات MySQL "TESTDB"
#!/usr/bin/python
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")
# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print "Database version : %s " % data
# disconnect from server
db.close()
أثناء تشغيل هذا البرنامج النصي ، ينتج عنه النتيجة التالية في جهاز Linux الخاص بي.
Database version : 5.0.45
إذا تم إنشاء اتصال بمصدر البيانات ، فسيتم إرجاع كائن الاتصال وحفظه في ديسيبل لاستخدامه مرة أخرى ، وإلا يتم تعيين ديسيبل على بلا. بعد ذلك ، يتم استخدام كائن db لإنشاء كائن مؤشر ، والذي بدوره يستخدم لتنفيذ استعلامات SQL. أخيرًا ، قبل الخروج ، يضمن إغلاق اتصال قاعدة البيانات وإطلاق الموارد.
Creating Database Table إنشاء جدول قاعدة البيانات
بمجرد إنشاء اتصال قاعدة بيانات ، نحن على استعداد لإنشاء جداول أو سجلات في جداول قاعدة البيانات باستخدام طريقة تنفيذ المؤشر الذي تم إنشاؤه.
مثال Example
دعنا ننشئ جدول قاعدة بيانات الموظف -
#!/usr/bin/python
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
# disconnect from server
db.close()
INSERT Operation عملية الادخال
مطلوب عندما تريد إنشاء سجلاتك في جدول قاعدة البيانات.
مثال Example
المثال التالي ينفذ عبارة SQL INSERT لإنشاء سجل في جدول الموظفين -
#!/usr/bin/python
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
يمكن كتابة المثال أعلاه على النحو التالي لإنشاء استعلامات SQL بشكل حيوي -
#!/usr/bin/python
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
('Mac', 'Mohan', 20, 'M', 2000)
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
مثال Example
مقطع التعليمات البرمجية التالي هو شكل آخر من أشكال التنفيذ حيث يمكنك تمرير المعلمات مباشرة -
..................................
user_id = "test123"
password = "password"
con.execute('insert into Login values("%s", "%s")' % \
(user_id, password))
..................................
READ Operation عمليات القراءة
اقرأ العملية على أي قاعدة بيانات تعني جلب بعض المعلومات المفيدة من قاعدة البيانات.
بمجرد إنشاء اتصال قاعدة البيانات الخاصة بنا ، تكون على استعداد للاستعلام عن قاعدة البيانات. يمكنك استخدام إما طريقة fetchone () لجلب سجل مفرد أو طريقة fetchall () لجلب قيم متعددة من جدول قاعدة البيانات.
fetchone() − يجلب الصف التالي من مجموعة نتائج الاستعلام. مجموعة النتائج هي كائن يتم إرجاعه عند استخدام كائن مؤشر للاستعلام عن جدول.
fetchall() −يجلب كل الصفوف في مجموعة النتائج. إذا تم بالفعل استخراج بعض الصفوف من مجموعة النتائج ، فسوف يسترجع الصفوف المتبقية من مجموعة النتائج.
rowcount − هذه سمة للقراءة فقط وتُرجع عدد الصفوف التي تأثرت بأسلوب execute ().
مثال Example
يستفسر الإجراء التالي عن كافة السجلات الموجودة في جدول الموظفين الذين لديهم راتب يزيد عن 1000 -
#!/usr/bin/python
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try:
# Execute the SQL command
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# Now print fetched result
print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income )
except:
print "Error: unable to fecth data"
# disconnect from server
db.close()
هذا سوف ينتج النتيجة التالية -
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
Update Operation عملية الحذف
تحديث العملية على أي قاعدة بيانات تعني تحديث سجل واحد أو أكثر ، والمتوفر بالفعل في قاعدة البيانات.
الإجراء التالي بتحديث جميع السجلات التي تحتوي على SEX كـ "M". هنا ، سنزيد العمر لكل الذكور لمدة عام.
مثال Example
#!/usr/bin/python
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
WHERE SEX = '%c'" % ('M')
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
DELETE Operation عملية الحذف
−عملية DELETE مطلوبة عندما تريد حذف بعض السجلات من قاعدة البيانات الخاصة بك. فيما يلي الإجراء المتبع لحذف جميع السجلات من الموظف حيث يبلغ العمر أكثر من 20 عامًا
مثال Example
#!/usr/bin/python
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
Performing Transactions تنفيذ المعاملات
المعاملات هي آلية تضمن تناسق البيانات. المعاملات لها الخصائص الأربعة التالية -
Atomicity − إما أن تكتمل المعاملة أو لا يحدث شيء على الإطلاق.
Consistency − يجب أن تبدأ المعاملة في حالة متسقة وترك النظام في حالة متسقة.
Isolation −النتائج الوسيطة للمعاملة غير مرئية خارج المعاملة الحالية.
Durability − بمجرد الالتزام بالمعاملة ، تكون التأثيرات مستمرة ، حتى بعد فشل النظام.
يوفر Python DB API 2.0 طريقتين للالتزام أو التراجع عن المعاملة.
مثال Example
أنت تعرف بالفعل كيفية تنفيذ المعاملات. هنا مثال مماثل مرة أخرى -
# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
COMMIT Operation الاعتماد وتطبيق التغيرات على قاعدة البيانات
.الالتزام هو العملية التي تعطي إشارة خضراء لقاعدة البيانات لإنهاء التغييرات ، وبعد هذه العملية لا يمكن التراجع عن أي تغيير.
هنا مثال بسيط للاتصال بأسلوب الالتزام
db.commit()
ROLLBACK Operation للتراجع
إذا لم تكن راضيًا عن واحد أو أكثر من التغييرات وتريد عكس تلك التغييرات تمامًا ، فاستخدم طريقة الاستعادة ().
هنا مثال بسيط لاستدعاء طريقة الاستعادة ().
db.rollback()
Disconnecting Database إنهاء الاتصال بقاعدة البيانات
لقطع اتصال قاعدة البيانات ، استخدم طريقة إغلاق ().
db.close()
إذا تم إغلاق الاتصال بقاعدة بيانات من قبل المستخدم باستخدام طريقة الإغلاق () ، فسيتم إرجاع أي معاملات معلقة بواسطة قاعدة البيانات. ومع ذلك ، بدلاً من الاعتماد على أي من تفاصيل تطبيق المستوى الأدنى لقاعدة البيانات ، سيكون تطبيقك في وضع أفضل من الالتزام أو التراجع صراحةً.
Handling Errors التعامل مع الأخطاء
هناك العديد من مصادر الأخطاء. بعض الأمثلة هي خطأ في بناء الجملة في عبارة SQL المنفذة ، أو فشل الاتصال ، أو استدعاء طريقة الجلب لمقبض العبارة الذي تم إلغاؤه أو انتهى بالفعل.
يعرّف DB API عدد من الأخطاء التي يجب أن توجد في كل وحدة نمطية لقاعدة البيانات. يسرد الجدول التالي هذه الاستثناءات.
الرقم المتسلسل | الاستثناء والوصف |
1 |
Warning
تستخدم للقضايا غير المميتة. يجب أن فئة فرعية StandardError.
|
2 |
Error
الفئة الأساسية للأخطاء. يجب أن فئة فرعية StandardError.
|
3 |
InterfaceError
يستخدم للأخطاء في وحدة قاعدة البيانات ، وليس في قاعدة البيانات نفسها. يجب خطأ فئة فرعية.
|
4 |
DatabaseError
يستخدم للأخطاء في قاعدة البيانات. يجب خطأ فئة فرعية.
|
5 |
DataError
فئة فرعية من DatabaseError تشير إلى أخطاء في البيانات.
|
6 |
OperationalError
فئة فرعية من DatabaseError التي تشير إلى أخطاء مثل فقدان الاتصال بقاعدة البيانات. هذه الأخطاء عادة ما تكون خارج نطاق سيطرة بايثون.
|
7 |
IntegrityError
فئة فرعية من DatabaseError للحالات التي من شأنها أن تضر بالعلاقة التكاملية ، مثل قيود التفرد أو المفاتيح الخارجية.
|
8 |
InternalError
فئة فرعية من DatabaseError تشير إلى الأخطاء الداخلية لوحدة قاعدة البيانات ، مثل المؤشر لم يعد نشطًا.
|
9 |
ProgrammingError
فئة فرعية من DatabaseError تشير إلى أخطاء مثل اسم جدول غير صالح وأشياء أخرى يمكن إلقاء اللوم عليها عليك بأمان.
|
10 |
NotSupportedError
فئة فرعية من DatabaseError تشير إلى محاولة استدعاء وظائف غير مدعومة.
|