آموزش دسترسی به پایگاه داده MySQL در برنامه نویسی پایتون ۳

3 سال پیش

 آموزش دسترسی به پایگاه داده MySQL در برنامه نویسی پایتون ۳

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش دسترسی به پایگاه داده MySQL در برنامه نویسی پایتون ۳ خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون

استاندارد پایتون برای رابط های پایگاه داده Python DB-API است. بیشتر رابط های پایگاه داده پایتون از این استاندارد پیروی می کنند.

شما می توانید پایگاه داده مناسب را برای برنامه خود انتخاب کنید. Python Database API از طیف وسیعی از سرورهای پایگاه داده مانند – پشتیبانی می کند

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase
  • SQLite

در اینجا لیستی از رابط های پایگاه داده پایتون موجود است – رابط های پایگاه داده پایتون و API ها. برای هر پایگاه داده ای که باید به آن دسترسی داشته باشید، باید یک ماژول API DB جداگانه دانلود کنید. به عنوان مثال، اگر نیاز به دسترسی به پایگاه داده Oracle و همچنین پایگاه داده MySQL دارید، باید هر دو ماژول پایگاه داده Oracle و MySQL را دانلود کنید.

DB API حداقل استانداردی را برای کار با پایگاه های داده با استفاده از ساختارهای Python و سینتکس در هر جایی که امکان دارد ارائه می دهد. این API شامل موارد زیر است –

  • وارد کردن ماژول API
  • ایجاد ارتباط با پایگاه داده
  • صدور دستورات SQL و رویه های ذخیره شده.
  • بستن اتصال

پایتون از SQLite پشتیبانی داخلی دارد. در این بخش با استفاده از MySQL تمام مفاهیم را یاد می گیریم. ماژول MySQLdb، یک رابط محبوب با MySQL با پایتون ۳ سازگار نیست. در عوض، ما از ماژول PyMySQL استفاده خواهیم کرد.

PyMySQL چیست؟

PyMySQL یک رابط برای اتصال به سرور پایگاه داده MySQL از پایتون است. این برنامه API پایگاه داده پایتون نسخه ۲٫۰ را پیاده سازی می کند و شامل یک کتابخانه کلاینت MySQL خالص پایتون است. هدف PyMySQL این است که جایگزینی برای MySQLdb باشد.

چگونه PyMySQL را نصب کنم؟

قبل از ادامه، مطمئن شوید که PyMySQL روی دستگاه خود نصب کرده اید. فقط عبارت زیر را در اسکریپت پایتون خود تایپ کنید و آن را اجرا کنید –

#!/usr/bin/python3

import pymysql

 

اگر نتیجه زیر را ایجاد کرد، به این معنی است که ماژول MySQLdb نصب نشده است –

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

 

ImportError: هیچ ماژولی با نام pymysql وجود ندارد
آخرین نسخه پایدار در PyPI در دسترس است و می توان آن را با pip – نصب کرد

pip install pymysql

 

روش دیگر (مثلاً اگر پیپ در دسترس نباشد)، یک tarball را می توان از GitHub بارگیری کرد و با Setuptools به شرح زیر نصب کرد –

$ # X.X is the desired pymysql version (e.g. 0.5 or 0.6).
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python setup.py install
$ # The folder PyMySQL* can be safely removed now.

 

توجه – مطمئن شوید که برای نصب ماژول فوق از دسترسی روت برخوردار هستید.

اتصال به پایگاه داده

قبل از اتصال به پایگاه داده MySQL، از نکات زیر اطمینان حاصل کنید

  • شما یک پایگاه داده TESTDB ایجاد کرده اید.
  • شما یک جدول EMPLOYEE در TESTDB ایجاد کرده اید.
  • این جدول دارای فیلدهای FIRST_NAME، LAST_NAME، AGE، SEX و INCOME است.
  • شناسه کاربری “testuser” و رمز عبور “test123” برای دسترسی به TESTDB تنظیم شده است.
  • ماژول Python PyMySQL به درستی روی دستگاه شما نصب شده است.
  • شما آموزش MySQL را برای درک مبانی MySQL گذرانده اید.

مثال

در زیر نمونه ای از اتصال با پایگاه داده MySQL “TESTDB” – آمده است

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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()

 

هنگام اجرای این اسکریپت، نتیجه زیر را ایجاد می کند.

Database version : 5.5.20-log

 

اگر ارتباطی با منبع داده برقرار شود، یک Connection Object برگردانده می شود و برای استفاده بیشتر در db ذخیره می شود، در غیر این صورت db روی None تنظیم می شود. بعد، شی db برای ایجاد یک شی مکان نما استفاده می شود، که به نوبه خود برای اجرای پرس و جوهای SQL استفاده می شود. در نهایت، قبل از بیرون آمدن، اطمینان حاصل می کند که اتصال پایگاه داده بسته شده و منابع آزاد شده اند.

ایجاد جدول پایگاه داده

هنگامی که اتصال پایگاه داده برقرار شد، ما آماده هستیم تا جداول یا رکوردها را با استفاده از روش اجرای مکان نما ایجاد شده در جداول پایگاه داده ایجاد کنیم.

مثال

اجازه دهید یک جدول پایگاه داده EMPLOYEE – ایجاد کنیم

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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

زمانی که می خواهید رکوردهای خود را در جدول پایگاه داده ایجاد کنید، عملیات INSERT مورد نیاز است.

مثال

مثال زیر دستور SQL INSERT را برای ایجاد یک رکورد در جدول EMPLOYEE اجرا می کند –

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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/python3

import pymysql

# Open database connection
db = pymysql.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()

 

مثال

بخش کد زیر شکل دیگری از اجرا است که در آن می توانید پارامترها را مستقیماً ارسال کنید

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

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

 

عملیات READ

عملیات READ در هر پایگاه داده به معنای واکشی اطلاعات مفید از پایگاه داده است.

  • هنگامی که اتصال پایگاه داده برقرار شد، شما آماده هستید تا یک پرس و جو در این پایگاه داده ایجاد کنید. می توانید از متد ()fetchone برای واکشی یک رکورد واحد یا متد ()fetchall برای واکشی چندین مقدار از جدول پایگاه داده استفاده کنید.
  • ()fetchone – سطر بعدی مجموعه نتایج پرس و جو را واکشی می کند. مجموعه نتیجه، شی ای است که وقتی از یک شی مکان نما برای جستجو در جدول استفاده می شود، برگردانده می شود.
  • ()fetchall – تمام سطرها را در یک مجموعه نتیجه واکشی می کند. اگر برخی از ردیف‌ها قبلاً از مجموعه نتایج استخراج شده باشند، بقیه ردیف‌ها را از مجموعه نتایج بازیابی می‌کند.
  • rowcount – این یک ویژگی فقط خواندنی است و تعداد ردیف هایی را که تحت تأثیر متد execute() قرار گرفته اند را برمی گرداند.

مثال

روش زیر تمام سوابق را از جدول EMPLOYEE با حقوق بیش از ۱۰۰۰ جستجو می کند –

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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 = "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 fetch data")

# disconnect from server
db.close()

 

این نتیجه زیر را ایجاد می کند –

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

 

عملیات به روز رسانی

به روز رسانی عملیات بر روی هر پایگاه داده به معنای به روز رسانی یک یا چند رکورد است که از قبل در پایگاه داده موجود است.

روش زیر تمام رکوردهایی را که دارای جنسیت “M” هستند به روز می کند. در اینجا، ما سن تمام مردان را یک سال افزایش می دهیم.

مثال

 

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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

هنگامی که می خواهید برخی از رکوردها را از پایگاه داده خود حذف کنید، عملیات DELETE مورد نیاز است. در زیر روش حذف تمام سوابق از EMPLOYEE در جایی که سن بیش از ۲۰ سال است وجود دارد.

 

مثال

#!/usr/bin/python3

import pymysql

# Open database connection
db = pymysql.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()

 

انجام تراکنش ها

تراکنش ها مکانیزمی هستند که ثبات داده ها را تضمین می کند. تراکنش ها دارای چهار ویژگی زیر هستند –

  • اتمی – یا یک تراکنش کامل می شود یا اصلاً هیچ اتفاقی نمی افتد.
  • سازگاری – یک تراکنش باید در یک حالت ثابت شروع شود و سیستم را در یک حالت ثابت باقی بگذارد.
  • جداسازی – نتایج میانی یک تراکنش خارج از تراکنش جاری قابل مشاهده نیست.
  • دوام – هنگامی که یک تراکنش انجام شد، اثرات آن حتی پس از خرابی سیستم پایدار است.

Python DB API 2.0 دو روش برای commit یا rollback یک تراکنش ارائه می دهد.

مثال

شما قبلاً می دانید که چگونه تراکنش ها را پیاده سازی کنید. در اینجا یک مثال مشابه است –

# 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

Commit عملیاتی است که برای نهایی کردن تغییرات به پایگاه داده سیگنال سبز رنگ می دهد و پس از این عملیات هیچ تغییری قابل برگشت نیست.

در اینجا یک مثال ساده برای فراخوانی متد commit آورده شده است.

db.commit()

 

عملیات ROLLBACK

اگر از یک یا چند مورد از تغییرات راضی نیستید و می خواهید آن تغییرات را به طور کامل برگردانید، از متد rollback() استفاده کنید.

در اینجا یک مثال ساده برای فراخوانی متد rollback() آورده شده است.

db.rollback()

 

قطع ارتباط پایگاه داده

برای قطع اتصال پایگاه داده، از متد ()close استفاده کنید.

db.close()

 

اگر اتصال به پایگاه داده توسط کاربر با متد ()close بسته شود، هر تراکنش معوقه توسط DB بازگردانده می شود. با این حال، به جای وابستگی به هر یک از جزئیات پیاده سازی سطح پایین تر DB، برنامه شما بهتر است به طور صریح commit یا rollback را فراخوانی کند.

رسیدگی به خطاها

منابع بسیاری از خطاها وجود دارد. چند مثال عبارتند از یک خطای نحوی در یک دستور SQL اجرا شده، یک شکست اتصال، یا فراخوانی متد واکشی برای یک دسته دستور از قبل لغو شده یا تمام شده.

DB API تعدادی خطا را تعریف می کند که باید در هر ماژول پایگاه داده وجود داشته باشد. جدول زیر این استثناها را فهرست می کند.

Sr.No. Exception & Description
۱ Warning

برای مسائل غیر خطرناک استفاده می شود. باید زیر کلاس StandardError باشد.

۲ Error

کلاس پایه برای خطاها باید زیر کلاس StandardError باشد.

۳ InterfaceError

برای خطاهای ماژول پایگاه داده استفاده می شود، نه خود پایگاه داده. باید زیر کلاس Error.

۴ DatabaseError

برای خطاهای موجود در پایگاه داده استفاده می شود. باید زیر کلاس Error.

۵ DataError

زیر کلاس DatabaseError که به خطاهای موجود در داده ها اشاره دارد.

۶ OperationalError

زیر کلاس DatabaseError که به خطاهایی مانند قطع اتصال به پایگاه داده اشاره دارد. این خطاها به طور کلی خارج از کنترل اسکریپت پایتون هستند.

۷ IntegrityError

زیر کلاس DatabaseError برای موقعیت‌هایی که به یکپارچگی رابطه آسیب می‌رساند، مانند محدودیت‌های منحصربه‌فرد یا کلیدهای خارجی.

۸ InternalError

زیر کلاس DatabaseError که به خطاهای داخلی ماژول پایگاه داده اشاره می کند، مانند اینکه مکان نما دیگر فعال نیست.

۹ ProgrammingError

زیر کلاس DatabaseError که به خطاهایی مانند نام بد جدول و موارد دیگری اشاره دارد که می‌توان با خیال راحت شما را مقصر دانست.

۱۰ NotSupportedError

زیر کلاس DatabaseError که به تلاش برای فراخوانی عملکرد پشتیبانی نشده اشاره دارد.

 

اسکریپت های پایتون شما باید این خطاها را مدیریت کنند، اما قبل از استفاده از هر یک از استثناهای بالا، مطمئن شوید که MySQLdb شما از آن استثنا پشتیبانی می کند. با مطالعه مشخصات DB API 2.0 می توانید اطلاعات بیشتری در مورد آنها بدست آورید.

 

منبع.

 

 

لیست جلسات قبل آموزش برنامه نوبسی پایتون ۳

  1. آموزش برنامه نویسی پایتون ۳
  2. آموزش موارد جدید در برنامه نویسی پایتون ۳
  3. آموزش مرور کلی برنامه نویسی پایتون ۳
  4. آموزش راه اندازی محیط برنامه نویسی پایتون ۳
  5. آموزش نحو در برنامه نویسی پایتون ۳
  6. آموزش انواع متغیرها در برنامه نویسی پایتون ۳
  7.  آموزش عملگرهای پایه در برنامه نویسی پایتون ۳
  8.  آموزش تصمیم گیری در برنامه نویسی پایتون ۳
  9.  آموزش حلقه ها در برنامه نویسی پایتون ۳
  10. آموزش اعداد در برنامه نویسی پایتون ۳
  11. آموزش رشته ها در برنامه نویسی پایتون ۳
  12.  آموزش لیست ها در برنامه نویسی پایتون ۳
  13.  آموزش تاپل ها در برنامه نویسی پایتون ۳
  14. آموزش دیکشنری در برنامه نویسی پایتون ۳
  15.  آموزش تاریخ و زمان در برنامه نویسی پایتون ۳
  16.  آموزش توابع در برنامه نویسی پایتون ۳
  17. آموزش ماژول ها در برنامه نویسی پایتون ۳
  18. آموزش فایل های ورودی/خروجی در برنامه نویسی پایتون ۳
  19. آموزش مدیریت استثنا در برنامه نویسی پایتون ۳
  20. آموزش شی گرایی در برنامه نویسی پایتون ۳
  21.  آموزش عبارات منظم در برنامه نویسی پایتون ۳
  22. آموزش CGI در برنامه نویسی پایتون ۳
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه