السبت، 28 ديسمبر 2019

الوصول إلى قواعد البيانات واستخدام لغة الاستعلام البنيوية في بايثون بيثون How do I connect to a MySQL database in python?

الوصول إلى قواعد البيانات واستخدام لغة الاستعلام البنيوية في بايثون بيثون

 Python  MySQL Database Access

كيف يمكنني الاتصال بقاعدة بيانات MySQL في لغة بايثون بيثون ؟How do I connect to a MySQL database in python?

كيف يمكنني الاتصال بقاعدة بيانات MySQL في لغة بايثون بيثون ؟How do I connect to a MySQL database in python?


معيار بايثون Python لواجهات قاعدة البيانات هو Python DB API.  تلتزم معظم واجهات قاعدة بيانات  بايثون Python بهذا المعيار.

 يمكنك اختيار قاعدة البيانات الصحيحة للتطبيق الخاص بك.  يدعم 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 هذا ما يلي -
  1.  استيراد وحدة API.
  2.  الحصول على اتصال مع قاعدة البيانات.
  3.  إصدار عبارات SQL والإجراءات المخزنة.
  4.  إغلاق الاتصال
 سنتعلم جميع المفاهيم باستخدام 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 تشير إلى محاولة استدعاء وظائف غير مدعومة.
يجب أن تتعامل نصوص  بايثون Python الخاصة بك مع هذه الأخطاء ، ولكن قبل استخدام أيٍ من الاستثناءات المذكورة أعلاه ، تأكد من دعم MySQLdb لهذا الاستثناء.  يمكنك الحصول على مزيد من المعلومات حولهم من خلال قراءة مواصفات DB API 2.0.

الاتصال مع قواعد البيانات  بايثون ويندوز من خلال سيرفر XAMPP

أولا وقبل كل شيء علينا تثبيت حزمة موصل mysql python.  لتثبيت حزمة mysql ، قم بما يلي: انتقل إلى دليل Scripts في  بايثون python.هذا يعتمد أين أنت تحتفظ او قمت بتحميل بايثون  على اي جزء او قسم من القرص الصلب في جهازك الحاسوب. 

C:\Software\Python\Python36-32\SCRIPTS
 في جهازي الحاسوب  قمت بتحميل لغة بايثون في الدليل او القسم C فإذا كانت لدى في قسم  اخر انسخ الدليل بالكامل وإلصقه في محرر الأوامر  DOS  مع كتابة الأمر كالتالي. 
C:\Software\Python\Python36-32\Scripts> pip install pymysql

عندها سيتم تحميل قواعد بيانات بايثون والان الي ربطها مع سيرفر اكزامب XAMMP. 

كيفية الاتصال مع قاعدة البيانات بايثون في ويندوز

 أنا أستخدم xampp لقاعدة البيانات الخاصة بي.  هذه خطوة اختيارية ، إذا كان لديك MySQL مثبتًا بالفعل ، فيمكنك تخطي هذه الخطوة.
قبل بدء كتابة الكود  ، قم بتشغيل سيرفر xampp وابدأ Apache & MySQL.  في المتصفح اكتب
 (https: // localhost / phpmyadmin /) ، 
لقد قمت بإنشاء قاعدة بيانات باسم databaseName والتي تظهر أدناه:

كيفية الاتصال مع قاعدة البيانات بايثون في ويندوز


كيف تنشيء او تبني  قاعدة بيانات في سيرفر اكزامب xampp 

انقر فوق علامة التبويب قاعدة البيانات  Database .  الآن يجب أن ترى خيار إنشاء قاعدة بيانات وحقل إدخال لإدخال اسم قاعدة البيانات.  اكتب اسم قاعدة البيانات واضغط على الزر "إنشاء".  سترى رسالة نجاح ف.

 من قائمة الجداول ، يمكنك عرض قاعدة البيانات الخاصة بك.  أنت حر في استخدام قاعدة البيانات هذه أينما تريد مع الإعدادات الافتراضية.  بشكل افتراضي ، اسم المضيف هو "localhost" ، مستخدم MySQL هو "root"  وبدون كلمة مرور.

كيف تنشيء او تبني  قاعدة بيانات في سيرفر اكزامب xampp


كيفية إنشاء الجداول باستخدام phpMyAdmin XAMPP

تلعب الجداول دورًا حيويًا في تخزين المعلومات (المحتوى الديناميكي).  في XAMPP MySQL قم بتخزين المعلومات في الجداول.  يمكنك بسهولة إضافة جداول إلى MySQL باستخدام واجهة مستخدم phpMyAdmin البديهية.  في phpMyAdmin ، انقر فوق علامة التبويب "الهيكل Structure".  أسفل قائمة الجداول في أسفل الصفحة ، انقر فوق معالج "إنشاء جدول جديد في قاعدة البيانات" للبدء.  أولاً ، أضف اسم الجدول والعدد الإجمالي للحقول واضغط على زر "Go".

كيفية إنشاء الجداول باستخدام phpMyAdmin XAMPP


بهذه الطريقة سيتم تشغيلك إلى معالج خطوة بخطوة حيث تحتاج إلى ملء الحقول المطلوبة.  أولاً ، قم بتسمية جميع الحقول وحدد النوع المناسب لكل حقل.  ومع ذلك ، من أجل اختيار النوع ، استخدم القائمة المنسدلة "النوع" واملأ قيمة بطول كل حقل.  بعد ذلك ، عيّن "سمة" لكل حقل.  من القائمة المنسدلة "Null" ، حدد الخيار null وحدد ما إذا كان الحقل المحدد مفتاحًا أساسيًا أم لا.  وأخيرًا ، حدد نوع الجدول وطريقة الترتيب وانقر على الزر "حفظ" لإنهاء عملية إنشاء الجدول.


الان  كيفية االاتصال مع قواعد البيانات في محرر النصوص الخاص ب بايثون؟ 

الأوامر هي نفسها التي استخدمناها مع حرر البيانات بايثون سكريبت في نظام لينكس، سوف اعيد كتابتها للاتصال مع قاعدة البيانات التي انشانها على سيرفر اكزامب xampp. 

import
pymysql
#database connection
connection = pymysql.connect(host=
"localhost"
, user=
"root"
, passwd=
""
, database=
"databaseName"
) cursor = connection.cursor()
# Query for creating table
ArtistTableSql =
"""CREATE TABLE Artists( ID INT(20) PRIMARY KEY AUTO_INCREMENT, NAME CHAR(20) NOT NULL, TRACK CHAR(10))"""
cursor.execute(ArtistTableSql) connection.close()
سيتم إنشاء جدول Artists باستخدام أوامر لغة الاستعلام البنيوية sql.  يمكنك رؤيته في متصفحك.
كيفية االاتصال مع قواعد البيانات في محرر النصوص الخاص ب بايثون


كيفية إضافة بيانات في بايثون Python MySQL

 الآن اهتمامنا هو إدراج بعض كيانات الصف في الجدول.  عليك أولاً كتابة الاستعلامات لإدخال بيانات مختلفة ، ثم تنفيذها بمساعدة المؤشر.
import pymysql
#database connection
connection = pymysql.connect(host=
"localhost"
, user=
"root"
, passwd=
""
, database=
"databaseName"
) cursor = connection.cursor()
# queries for inserting values
insert1 =
"INSERT INTO Artists(NAME, TRACK) VALUES('Towang', 'Jazz' );"
insert2 =
"INSERT INTO Artists(NAME, TRACK) VALUES('Sadduz', 'Rock' );"
#executing the quires
cursor.execute(insert1) cursor.execute(insert2)
#commiting the connection then closing it.
connection.commit() connection.close()

كيفية استرجاع البيانات في قواعد البيانات بايثون Python MySQL

 لقد أدخلنا صفين في الكود أعلاه.  الآن نريد استرداد هؤلاء.  للقيام بذلك ، ألق نظرة على المثال التالي:

import pymysql
#database connection
connection = pymysql.connect(host=
"localhost"
, user=
"root"
, passwd=
""
, database=
"databaseName"
) cursor = connection.cursor()
# queries for retrievint all rows
retrive =
"Select * from Artists;"
#executing the quires
cursor.execute(retrive) rows = cursor.fetchall() for row in rows: print(row)
#commiting the connection then closing it.
connection.commit() connection.close()


المخرجات كالتالي. 
كيفية استرجاع البيانات في قواعد البيانات بايثون Python MySQL

كيفية تحديث البيانات في قواعد البيانات بايثون في Python MySQL

 لنفترض أنك تريد إعادة تسمية اسم الفنان الأول من Towang إلى Tauwang.  لتحديث أي سمة لأي كيان ، قم بما يلي:

updateSql = "
UPDATE
Artists
SET
NAME
=
'Tauwang'
WHERE
ID
=
'1'
;" cursor.execute(updateSql )

كيفية حذف سجل في قاعدة البيانات بايثون Python MySQL

 لحذف كيان ، عليك تنفيذ ما يلي:

deleteSql = "
DELETE
FROM
Artists
WHERE
ID
=
'1'
; " cursor.execute(deleteSql )

كيفية حذف جدول في قاعدة البيانات بايثون Python MySQL

 قد تحتاج في بعض الأحيان إلى حذف أي جدول قبل إنشاء أي جدول جديد حتى لا يحدث تضارب الأسماء هذا.  هنا حذف  جدول Artists ، يمكنك القيام بذلك على النحو التالي:

dropSql = "DROPTABLEIFEXISTS Artists;" cursor.execute(dropSql)








التسميات: