آموزش دسترسی به پایگاه داده MySQL در برنامه نویسی پایتون 3
آموزش دسترسی به پایگاه داده MySQL در برنامه نویسی پایتون 3
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش دسترسی به پایگاه داده MySQL در برنامه نویسی پایتون 3 خواهیم پرداخت.
پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون
استاندارد پایتون برای رابط های پایگاه داده 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 با پایتون 3 سازگار نیست. در عوض، ما از ماژول PyMySQL استفاده خواهیم کرد.
PyMySQL چیست؟
PyMySQL یک رابط برای اتصال به سرور پایگاه داده MySQL از پایتون است. این برنامه API پایگاه داده پایتون نسخه 2.0 را پیاده سازی می کند و شامل یک کتابخانه کلاینت MySQL خالص پایتون است. هدف PyMySQL این است که جایگزینی برای MySQLdb باشد.
چگونه PyMySQL را نصب کنم؟
قبل از ادامه، مطمئن شوید که PyMySQL روی دستگاه خود نصب کرده اید. فقط عبارت زیر را در اسکریپت پایتون خود تایپ کنید و آن را اجرا کنید –
1 2 3 |
#!/usr/bin/python3 import pymysql |
اگر نتیجه زیر را ایجاد کرد، به این معنی است که ماژول MySQLdb نصب نشده است –
1 2 3 4 |
Traceback (most recent call last): File "test.py", line 3, in <module> Import pymysql ImportError: No module named pymysql |
ImportError: هیچ ماژولی با نام pymysql وجود ندارد
آخرین نسخه پایدار در PyPI در دسترس است و می توان آن را با pip – نصب کرد
1 |
pip install pymysql |
روش دیگر (مثلاً اگر پیپ در دسترس نباشد)، یک tarball را می توان از GitHub بارگیری کرد و با Setuptools به شرح زیر نصب کرد –
1 2 3 4 5 |
$ # 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” – آمده است
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/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() |
هنگام اجرای این اسکریپت، نتیجه زیر را ایجاد می کند.
1 |
Database version : 5.5.20-log |
اگر ارتباطی با منبع داده برقرار شود، یک Connection Object برگردانده می شود و برای استفاده بیشتر در db ذخیره می شود، در غیر این صورت db روی None تنظیم می شود. بعد، شی db برای ایجاد یک شی مکان نما استفاده می شود، که به نوبه خود برای اجرای پرس و جوهای SQL استفاده می شود. در نهایت، قبل از بیرون آمدن، اطمینان حاصل می کند که اتصال پایگاه داده بسته شده و منابع آزاد شده اند.
ایجاد جدول پایگاه داده
هنگامی که اتصال پایگاه داده برقرار شد، ما آماده هستیم تا جداول یا رکوردها را با استفاده از روش اجرای مکان نما ایجاد شده در جداول پایگاه داده ایجاد کنیم.
مثال
اجازه دهید یک جدول پایگاه داده EMPLOYEE – ایجاد کنیم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/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 اجرا می کند –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/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 به صورت پویا – نوشت
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#!/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() |
مثال
بخش کد زیر شکل دیگری از اجرا است که در آن می توانید پارامترها را مستقیماً ارسال کنید
1 2 3 4 5 6 7 |
.................................. 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 با حقوق بیش از 1000 جستجو می کند –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/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() |
این نتیجه زیر را ایجاد می کند –
1 |
fname = Mac, lname = Mohan, age = 20, sex = M, income = 2000 |
عملیات به روز رسانی
به روز رسانی عملیات بر روی هر پایگاه داده به معنای به روز رسانی یک یا چند رکورد است که از قبل در پایگاه داده موجود است.
روش زیر تمام رکوردهایی را که دارای جنسیت “M” هستند به روز می کند. در اینجا، ما سن تمام مردان را یک سال افزایش می دهیم.
مثال
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/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 در جایی که سن بیش از 20 سال است وجود دارد.
مثال
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/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 یک تراکنش ارائه می دهد.
مثال
شما قبلاً می دانید که چگونه تراکنش ها را پیاده سازی کنید. در اینجا یک مثال مشابه است –
1 2 3 4 5 6 7 8 9 10 |
# 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 آورده شده است.
1 |
db.commit() |
عملیات ROLLBACK
اگر از یک یا چند مورد از تغییرات راضی نیستید و می خواهید آن تغییرات را به طور کامل برگردانید، از متد rollback() استفاده کنید.
در اینجا یک مثال ساده برای فراخوانی متد rollback() آورده شده است.
1 |
db.rollback() |
قطع ارتباط پایگاه داده
برای قطع اتصال پایگاه داده، از متد ()close استفاده کنید.
1 |
db.close() |
اگر اتصال به پایگاه داده توسط کاربر با متد ()close بسته شود، هر تراکنش معوقه توسط DB بازگردانده می شود. با این حال، به جای وابستگی به هر یک از جزئیات پیاده سازی سطح پایین تر DB، برنامه شما بهتر است به طور صریح commit یا rollback را فراخوانی کند.
رسیدگی به خطاها
منابع بسیاری از خطاها وجود دارد. چند مثال عبارتند از یک خطای نحوی در یک دستور SQL اجرا شده، یک شکست اتصال، یا فراخوانی متد واکشی برای یک دسته دستور از قبل لغو شده یا تمام شده.
DB API تعدادی خطا را تعریف می کند که باید در هر ماژول پایگاه داده وجود داشته باشد. جدول زیر این استثناها را فهرست می کند.
Sr.No. | Exception & Description |
---|---|
1 | Warning
برای مسائل غیر خطرناک استفاده می شود. باید زیر کلاس StandardError باشد. |
2 | Error
کلاس پایه برای خطاها باید زیر کلاس StandardError باشد. |
3 | InterfaceError
برای خطاهای ماژول پایگاه داده استفاده می شود، نه خود پایگاه داده. باید زیر کلاس Error. |
4 | DatabaseError
برای خطاهای موجود در پایگاه داده استفاده می شود. باید زیر کلاس Error. |
5 | DataError
زیر کلاس DatabaseError که به خطاهای موجود در داده ها اشاره دارد. |
6 | OperationalError
زیر کلاس DatabaseError که به خطاهایی مانند قطع اتصال به پایگاه داده اشاره دارد. این خطاها به طور کلی خارج از کنترل اسکریپت پایتون هستند. |
7 | IntegrityError
زیر کلاس DatabaseError برای موقعیتهایی که به یکپارچگی رابطه آسیب میرساند، مانند محدودیتهای منحصربهفرد یا کلیدهای خارجی. |
8 | InternalError
زیر کلاس DatabaseError که به خطاهای داخلی ماژول پایگاه داده اشاره می کند، مانند اینکه مکان نما دیگر فعال نیست. |
9 | ProgrammingError
زیر کلاس DatabaseError که به خطاهایی مانند نام بد جدول و موارد دیگری اشاره دارد که میتوان با خیال راحت شما را مقصر دانست. |
10 | NotSupportedError
زیر کلاس DatabaseError که به تلاش برای فراخوانی عملکرد پشتیبانی نشده اشاره دارد. |
اسکریپت های پایتون شما باید این خطاها را مدیریت کنند، اما قبل از استفاده از هر یک از استثناهای بالا، مطمئن شوید که MySQLdb شما از آن استثنا پشتیبانی می کند. با مطالعه مشخصات DB API 2.0 می توانید اطلاعات بیشتری در مورد آنها بدست آورید.
لیست جلسات قبل آموزش برنامه نوبسی پایتون 3
- آموزش برنامه نویسی پایتون 3
- آموزش موارد جدید در برنامه نویسی پایتون 3
- آموزش مرور کلی برنامه نویسی پایتون 3
- آموزش راه اندازی محیط برنامه نویسی پایتون 3
- آموزش نحو در برنامه نویسی پایتون 3
- آموزش انواع متغیرها در برنامه نویسی پایتون 3
- آموزش عملگرهای پایه در برنامه نویسی پایتون 3
- آموزش تصمیم گیری در برنامه نویسی پایتون 3
- آموزش حلقه ها در برنامه نویسی پایتون 3
- آموزش اعداد در برنامه نویسی پایتون 3
- آموزش رشته ها در برنامه نویسی پایتون 3
- آموزش لیست ها در برنامه نویسی پایتون 3
- آموزش تاپل ها در برنامه نویسی پایتون 3
- آموزش دیکشنری در برنامه نویسی پایتون 3
- آموزش تاریخ و زمان در برنامه نویسی پایتون 3
- آموزش توابع در برنامه نویسی پایتون 3
- آموزش ماژول ها در برنامه نویسی پایتون 3
- آموزش فایل های ورودی/خروجی در برنامه نویسی پایتون 3
- آموزش مدیریت استثنا در برنامه نویسی پایتون 3
- آموزش شی گرایی در برنامه نویسی پایتون 3
- آموزش عبارات منظم در برنامه نویسی پایتون 3
- آموزش CGI در برنامه نویسی پایتون 3
دیدگاه شما