Latest web development tutorials

اتصال قاعدة البيانات Python3 الخلية

في هذه الورقة، ونحن نقدم Python3 استخدام PyMySQL الاتصال بقاعدة البيانات، وCRUD بسيط.

ما هو PyMySQL؟

PyMySQL للاتصال قاعدة بيانات نسخة خادم MySQL في Python3.x، Python2 في استخدام mysqldb.

PyMySQL اتبع بيثون API قاعدة بيانات المواصفات V2.0 ويحتوي على مكتبة العميل ماي-بيثون نقية.


تركيب PyMySQL

قبل استخدام PyMySQL، نحن بحاجة إلى ضمان PyMySQL تثبيت.

PyMySQL التحميل: الشبكي: //github.com/PyMySQL/PyMySQL.

إذا لم تكن مثبتة بالفعل، يمكننا استخدام الأمر التالي لتثبيت أحدث إصدار من PyMySQL:

$ pip install PyMySQL

إذا كان نظامك لا يدعم قيادة PIP، يمكنك استخدام التالية مثبتة:

1، وذلك باستخدام الأمر بوابة لتحميل حزمة التثبيت (يمكنك أيضا يدويا تحميل):

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

2، إذا كنت بحاجة إلى تطوير رقم الإصدار، يمكنك استخدام الأمر حليقة التركيب:

$ # X.X 为 PyMySQL 的版本号
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install
$ # 现在你可以删除 PyMySQL* 目录

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

قد تظهر عملية التثبيت "ImportError: لا وحدة اسمه setuptools" رسالة الخطأ، مما يعني أنك لا تحتاج إلى تثبيت setuptools، يمكنك الوصول https://pypi.python.org/pypi/setuptools العثور على طريقة تركيب كل نظام.

تركيب لينكس على سبيل المثال:

$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py

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

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

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

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

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

#!/usr/bin/python3

import pymysql

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

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

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

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

print ("Database version : %s " % data)

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

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

Database version : 5.5.20-log

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

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

#!/usr/bin/python3

import pymysql

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

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 使用预处理语句创建表
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/python3

import pymysql

# 打开数据库连接
db = pymysql.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:
   # 如果发生错误则回滚
   db.rollback()

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

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

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.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)
   # 执行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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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.