Latest web development tutorials

عمليات الثعبان قاعدة بيانات MySQL

بيثون واجهة قاعدة بيانات موحدة لبايثون DB-API، بايثون DB-API يوفر واجهة برمجة التطبيقات قاعدة بيانات للمطورين.

واجهة قاعدة بيانات بيثون تدعم قواعد بيانات كبيرة جدا، يمكنك اختيار مشروع قاعدة البيانات الخاصة بك:

  • النعرة
  • MSQL
  • الخلية
  • كيو
  • مايكروسوفت SQL خادم 2000
  • ينفورميكس
  • ينترباسي
  • وحي
  • سايبيس

يمكنك الوصول إلى واجهة قاعدة بيانات بيثون وAPI انظر قائمة مفصلة من قواعد بيانات معتمدة.

قاعدة بيانات مختلفة سوف تحتاج إلى تحميل وحدة نمطية API DB مختلفة، على سبيل المثال، تحتاج للوصول إلى قواعد بيانات أوراكل والبيانات الخلية، تحتاج إلى تحميل وحدة قاعدة بيانات أوراكل و MySQL.

DB-API هي المواصفات التي تحدد مجموعة من الأشياء وقاعدة البيانات يجب وضع الوصول، وذلك لتوفير واجهة متناسقة للوصول إلى مجموعة واسعة من نظام قاعدة البيانات الأساسية ومجموعة متنوعة من برنامج واجهة قاعدة البيانات.

DB-API بايثون، لأكثر من قاعدة بيانات تطبق الواجهة، واستخدامها بعد ربط قاعدة البيانات، يمكنك استخدام نفس الطريقة لكل قاعدة بيانات.

بايثون DB-API باستخدام عملية:

  • إدخال وحدة API.
  • الحصول على اتصال قاعدة البيانات.
  • تنفيذ عبارات SQL والإجراءات المخزنة.
  • إغلاق اتصال قاعدة البيانات.

ما هو MySQLdb؟

MySQLdb هو واجهة لربط قاعدة بيانات بيثون الخلية، التي تطبق بيثون مواصفات API قاعدة البيانات V2.0، على أساس إنشاء API الخلية مئوية.


كيفية تثبيت MySQLdb؟

لكتابة البرامج النصية الخلية مع DB-API، يجب عليك التأكد من أنك قد قمت بتثبيت الخلية. نسخ التعليمة البرمجية التالية، وتنفيذ ما يلي:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

إذا كان الإخراج هو على النحو التالي بعد التنفيذ، وهو ما يعني لم يكن لديك يتم تثبيت وحدة MySQLdb:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
ImportError: No module named MySQLdb

تثبيت MySQLdb، زيارة http://sourceforge.net/projects/mysql-python ، (منصة لينكس يمكن الوصول إليها: https://pypi.python.org/pypi/MySQL-python ) من هنا اختيار النظام الأساسي الخاص بك حزمة التثبيت، قبل تجميعها في ثنائيات ومجموعة شفرة المصدر.

إذا قمت بتحديد الإصدار ثنائي، يطالب عملية التثبيت لإكمال التثبيت الأساسي. إذا تثبيت من شفرة المصدر، تحتاج إلى التحول إلى دليل الإصدار أعلى مستوى MySQLdb، واكتب الأمر التالي:

$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install

ملاحظة: تأكد من وجود امتيازات الجذر لتثبيت الوحدات المذكورة أعلاه.


اتصال قواعد البيانات

قبل الاتصال بقاعدة البيانات، تأكد من العناصر التالية:

  • لقد قمت بإنشاء قاعدة بيانات TESTDB.
  • في قاعدة بيانات TESTDB كنت قد أنشأت موظف الجدول
  • موظف FIRST_NAME حقل جدول، LAST_NAME والعمر والجنس والدخل.
  • للمستخدمين الاتصال إلى قاعدة البيانات باستخدام TESTDB يدعى "testuser" كلمة السر "test123"، يمكنك تعيين الخاص مباشرة أو الجذر اسم المستخدم وكلمة المرور الخاصة بك، ماي ترخيص المستخدم قاعدة البيانات، يرجى استخدام المنحة الأوامر.
  • على جهازك بالفعل تثبيت وحدة بيثون MySQLdb.
  • إذا كنت لم تكن مألوفة مع عبارة SQL، يمكنك زيارة موقعنا على أساس SQL تعليمي

على سبيل المثال:

الأمثلة التالية من ارتباط قاعدة البيانات TESTDB ماي:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()

print "Database version : %s " % data

# 关闭数据库连接
db.close()

تنفيذ البرنامج النصي أعلاه إخراج النتائج على النحو التالي:

Database version : 5.0.45

إنشاء قاعدة بيانات الجدول

في حالة وجود اتصال قاعدة البيانات، يمكننا استخدام طريقة تنفيذ () لإنشاء جدول قاعدة البيانات، إنشاء موظف الجدول المبين فيما يلي:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# 关闭数据库连接
db.close()

إدراج قاعدة بيانات

يستخدم المثال التالي تنفيذ عبارة SQL INSERT لإدراج سجل للموظف الجدول:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# 关闭数据库连接
db.close()

ويمكن أيضا أن المثال أعلاه تكون مكتوبة على النحو التالي:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

على سبيل المثال:

تستخدم التعليمة البرمجية التالية المتغيرات لتمرير المعلمات إلى بيان SQL:

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

استعلامات قاعدة البيانات

بيثون ماي الاستعلام باستخدام طريقة fetchone () للحصول على بيانات واحدة باستخدام fetchall طريقة () للحصول على عدد وافر من البيانات.

  • fetchone (): هذه الطريقة يحصل المقبل مجموعة نتائج الاستعلام.مجموعة النتائج هو الهدف
  • fetchall (): إرجاع نتيجة لتلقي كافة الصفوف.
  • ROWCOUNT: هذه هي سمة للقراءة فقط، وإرجاع تنفيذ تنفيذ طريقة () بعد عدد الصفوف المتأثرة.

على سبيل المثال:

اكتشف موظف جدول المرتبات (الأجور) حقل البيانات هو أعظم من الكل من 1000:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 获取所有记录列表
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # 打印结果
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# 关闭数据库连接
db.close()

النتائج تنفيذ البرنامج النصي أعلاه على النحو التالي:

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

قاعدة بيانات التحديثات

تحديث البيانات العملية لتحديث جدول البيانات، فإن الأمثلة التالية TESTDB الجدول حقل الجنس كافة التغييرات على 'م'، يتم زيادة الحقل AGE بنسبة 1:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

شطب

حذف البيانات حذف البيانات للجدول، يوضح المثال التالي حذف البيانات في الجدول AGE موظف أكبر من 20، كافة البيانات:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交修改
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭连接
db.close()

الشؤون التنفيذية

آلية عملية لضمان اتساق البيانات.

يجب أن يكون خدمات أربعة خصائص: atomicity، التناسق، والعزلة، والمتانة. وغالبا ما يشار إلى هذه الخصائص الأربعة على أنها خصائص الحمض.

  • الذرية (atomicity). معاملة هي وحدة لا تتجزأ من العمل، يتم تضمين هذه العمليات في الصفقة إما أن تفعل أو لا تفعل.
  • الاتساق (الاتساق). يجب تغيير الخدمات لجعل قاعدة البيانات من حالة متناسقة واحد إلى حالة متناسقة آخر. الاتساق وatomicity ترتبط ارتباطا وثيقا.
  • العزلة (العزلة). تنفيذ صفقة لا يمكن أن يكون الآخر تدخل صفقة. هذا هو المعاملة العملية الداخلية واستخدام الآخرين التزامن معاملة البيانات معزولة ولا يمكن أن تتداخل مع بعضها البعض بين المعاملات الفردية تنفذ في وقت واحد.
  • استمرار (المتانة). الثابتة وتسمى أيضا دائم (الدوام)، فهذا يعني أنه بمجرد أن يرتكب الصفقة، تغيير بياناتها في قاعدة البيانات يجب أن تكون دائمة. وغيرها من العمليات التالية أو فشلها لا ينبغي أن يكون له أي تأثير.

بايثون DB API 2.0 يوفر طريقتين من المعاملة تلتزم أو التراجع.

على سبيل المثال:

# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 向数据库提交
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

لقاعدة بيانات المعاملات، برمجة قواعد البيانات في بيثون، عندما يثبت المؤشر، تلقائيا يبدأ معاملة قاعدة بيانات غير مرئية.

ارتكاب طريقة () لجميع طريقة التحديثات المؤشر، تراجع () لدحر كل عمليات المؤشر الحالي. بدأ كل أسلوب عمل جديد.


التعامل مع الخطأ

DB API يحدد بعض الأخطاء وعملية غير عادية من قاعدة البيانات، يسرد الجدول التالي الأخطاء والاستثناءات:

غير طبيعي وصف
تحذير عندما يكون هناك انذار جدي لتحريك مثل يتم اقتطاع إدخال البيانات، وهلم جرا. يجب أن يكون فئة فرعية من StandardError.
خطأ جميع الفئات خطأ أخرى بخلاف التحذيرات. يجب أن يكون فئة فرعية من StandardError.
InterfaceError الحرائق عند وحدة واجهة قاعدة بيانات لديه خطأ الخاص به (بدلا من قاعدة بيانات خطأ) يحدث. يجب أن يكون فئة فرعية من خطأ.
DatabaseError الزناد وأخطاء قاعدة البيانات ذات الصلة. يجب أن يكون فئة فرعية من خطأ.
DataError عندما يكون هناك حدث خطأ في معالجة البيانات عندما أثار، على سبيل المثال: القسمة على صفر خطأ، البيانات خارج نطاق شابه ذلك. يجب أن يكون فئة فرعية من DatabaseError.
OperationalError وهو يشير إلى غير المستخدم التي تسيطر عليها، ولكن حدث خطأ أثناء قاعدة البيانات. على سبيل المثال: قطع طريق الخطأ، لم يتم العثور على اسم قاعدة البيانات، فشل الصفقة، خطأ في تخصيص الذاكرة، وقعت الخ العمليات خطأ في قاعدة البيانات. يجب أن يكون فئة فرعية من DatabaseError.
IntegrityError الأخطاء المتعلقة سلامة، مثل الاختيار مفتاح خارجي فشلت، وما شابه ذلك. يجب أن يكون DatabaseError فرعية.
InternalError خطأ داخلي في قاعدة بيانات، مثل مؤشر (المؤشر) فشل، وتزامن فشل الصفقة وهلم جرا. يجب أن يكون DatabaseError فرعية.
ProgrammingError أخطاء إجرائية، مثل جدول البيانات (الجدول) لم يتم العثور أو موجود بالفعل، خطأ في بناء الجملة عبارة SQL، رقم خطأ من المعلمات، وهلم جرا. يجب أن يكون فئة فرعية من DatabaseError.
NotSupportedError غير معتمد خطأ، يشير إلى استخدام وظائف مثل API أو قاعدة البيانات لا تدعم. على سبيل المثال، وذلك باستخدام .rollback على وظيفة كائن الاتصال () ولكن لا يدعم قاعدة بيانات المعاملات أو تم إغلاق الصفقة. يجب أن يكون فئة فرعية من DatabaseError.