از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
شروع کار با MySQL و Python
سرفصلهای مطلب
معرفی
برای هر برنامه کاربردی قابل استقرار کاملاً کاربردی، ماندگاری داده ها ضروری است. یک راه پیش پا افتاده برای ذخیره سازی داده ها نوشتن آن بر روی یک فایل در هارد دیسک است، اما به دلایل واضح، نوشتن داده های خاص برنامه در پایگاه داده را ترجیح می دهیم. پایتون پشتیبانی زبانی را برای نوشتن داده ها در طیف وسیعی از پایگاه های داده فراهم می کند.
Python DB API
در قلب پشتیبانی پایتون برای برنامه نویسی پایگاه داده، Python DB API است (PEP – 249) که وابسته نیست روی هر موتور پایگاه داده خاص بسته به روی پایگاه داده ای که ما در لایه persistence استفاده می کنیم، یک پیاده سازی مناسب از Python DB API باید وارد شده و در برنامه ما استفاده شود. در این آموزش روش استفاده از پایتون برای اتصال به پایگاه داده MySQL و انجام تراکنش با آن را نشان خواهیم داد. برای این کار از MySQLdb بسته پایتون
قبل از ادامه اتصال به پایگاه داده با استفاده از پایتون، باید کانکتور MySQL را برای پایتون نصب کنیم. این میتواند با دو راه انجام شود:
- یک راه این است که نصب کننده مناسب برای سیستم عامل و نسخه بیت را مستقیماً از سایت دانلود کنید سایت رسمی MySQL.
- راه دیگر استفاده است pip برای نصب آن
$ pip install mysql-connector-python
اگر نسخه MySQL خاصی در دستگاه محلی نصب شده باشد، ممکن است به یک نسخه اتصال MySQL خاص نیاز داشته باشید تا مشکل سازگاری ایجاد نشود، که می توانیم با استفاده از دستور زیر دریافت کنیم:
$ pip install mysql-connector-python==<insert_version_number_here>
در نهایت، ما باید ماژول مشتری MySQL را نصب کنیم که به ما امکان می دهد از برنامه پایتون خود به پایگاه داده MySQL متصل شویم، که به عنوان مشتری عمل می کند:
$ pip install mysqlclient
اتصال به پایگاه داده
وقتی کانکتور را در جای خود نصب کردیم، import MySQLdb
بیانیه نباید هیچ خطایی ایجاد کند روی اجرای فایل پایتون
پیش نیازها
توجه داشته باشید: فرض بر این است که خوانندگان درک پایه ای از پایگاه های داده به طور کلی و پایگاه داده MySQL به طور خاص، همراه با دانش زبان پرس و جو ساخت یافته (SQL) دارند. با این حال، اساسی process برای ایجاد پایگاه داده و کاربر در این قسمت توضیح داده شده است. این مراحل را دنبال کنید:
- اطمینان حاصل کنید که سرور MySQL شما در حال اجرا است. این را می توان از طریق MySQL WorkBench -> وضعیت سرور بررسی کرد.
- MySQL WorkBench یا MySQL CLI را باز کنید. یک پایگاه داده جدید ایجاد کنید. اجازه دهید آن را صدا کنیم
pythondb
.
CREATE DATABASE pythondb;
USE pythondb;
- یک کاربر جدید ایجاد کنید
pythonuser
با رمز عبورpythonpwd123
و اجازه دسترسی بهpythondb
CREATE USER 'pythonuser'@'localhost' IDENTIFIED BY 'pythonpwd123'
GRANT ALL PRIVILEGES روی pythondb.* To 'pythonuser'@'localhost'
FLUSH PRIVILEGES
در حال بررسی اتصال شما به pythondb
در اینجا یک اسکریپت ساده است که می تواند برای آزمایش برنامه نویسی اتصال به پایگاه داده جدید ایجاد شده استفاده شود:
import MySQLdb
dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")
cursor = dbconnect.cursor()
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
if data:
print('Version retrieved: ', data)
else:
print('Version not retrieved.')
dbconnect.close()
خروجی
Version retrieved: 5.7.19
شماره نسخه نشان داده شده در بالا فقط یک عدد ساختگی است. باید با نسخه سرور MySQL نصب شده مطابقت داشته باشد.
اجازه دهید نگاهی دقیق تر به نمونه برنامه بالا بیندازیم تا روش عملکرد آن را بیاموزیم. اول از همه، import MySQLdb
استفاده میشه برای import مورد نیاز python مدول.
MySQLdb.connect()
متد برای ایجاد اتصال پایگاه داده، نام میزبان، نام کاربری، رمز عبور و نام طرح پایگاه داده را می گیرد. در صورت اتصال موفقیت آمیز به پایگاه داده، یک شیء اتصال (که به آن اشاره می شود، برمی گرداند dbconnect
اینجا).
با استفاده از شیء اتصال، میتوانیم پرسوجوها، انجام تراکنشها و تراکنشهای برگشتی را قبل از بستن اتصال اجرا کنیم.
هنگامی که شی اتصال را دریافت کردیم، باید a را دریافت کنیم MySQLCursor
شی به منظور اجرای پرس و جو با استفاده از execute
روش. مجموعه نتیجه تراکنش را می توان با استفاده از fetchall
، fetchone
، یا fetchmany
روش هایی که بعداً در این آموزش مورد بحث قرار خواهند گرفت.
سه روش مهم در ارتباط با تراکنش های پایگاه داده جدای از روش اجرا وجود دارد. اکنون به طور خلاصه با این روش ها آشنا می شویم.
این dbconnect.commit()
متد به پایگاه داده اطلاع می دهد که تغییرات انجام شده قبل از فراخوانی این تابع باید نهایی شوند و در صورت موفقیت آمیز بودن تراکنش، امکان بازگشت به حالت قبلی وجود ندارد.
گاهی اوقات، اگر یک تراکنش خراب شود، باید قبل از وقوع خرابی، پایگاه داده را به حالت قبلی تغییر دهیم تا داده ها از بین نرود یا خراب نشود. در چنین حالتی، باید با استفاده از پایگاه داده را به حالت قبلی برگردانیم dbconnect.rollback()
.
در نهایت، dbconnect.close()
روش برای بستن اتصال به پایگاه داده استفاده می شود. برای انجام تراکنش های بیشتر، باید یک اتصال جدید ایجاد کنیم.
یک جدول جدید ایجاد کنید
یک بار ارتباط با pythondb
با موفقیت ایجاد شد، ما آماده رفتن به مرحله بعدی هستیم. بیایید یک جدول جدید در آن ایجاد کنیم:
import MySQLdb
dbconnect = MySQLdb.connect("localhost","pythonuser","pythonpwd123","pythondb" )
cursor = dbconnect.cursor()
cursor.execute("DROP TABLE IF EXISTS MOVIE")
query = "CREATE TABLE MOVIE( \
id int(11) NOT NULL,\
name varchar(20),\
year int(11),\
director varchar(20),\
genre varchar(20),\
PRIMARY KEY (id))"
cursor.execute(query)
dbconnect.close()
پس از اجرای اسکریپت فوق، باید بتوانید جدول جدیدی را مشاهده کنید movie
برای طرحواره ایجاد شده است pythondb
. این را می توان با استفاده از MySQL WorkBench مشاهده کرد.
انجام عملیات CRUD
اکنون برخی از عملیات درج، خواندن، اصلاح و حذف را در جدول پایگاه داده جدید ایجاد شده از طریق اسکریپت پایتون انجام خواهیم داد.
ایجاد یک رکورد جدید
اسکریپت زیر روش درج یک رکورد جدید را با استفاده از اسکریپت پایتون در پایگاه داده MySQL نشان می دهد:
import MySQLdb
dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")
cursor = dbconnect.cursor()
query = 'insert into movie(id, name, year, director, genre) \
values (1, "Bruce Almighty", 2003, "Tom Shaydac", "Comedy")'
try:
cursor.execute(query)
dbconnect.commit()
except:
dbconnect.rollback()
finally:
dbconnect.close()
خواندن ردیف ها از یک جدول
هنگامی که یک ردیف جدید در پایگاه داده درج می شود، می توانید داده ها را به سه روش با استفاده از شی مکان نما واکشی کنید:
cursor.fetchall()
– می توان برای دریافت تمام ردیف ها استفاده کردcursor.fetchmany()
– می توان برای بدست آوردن تعداد ردیف انتخاب شده استفاده کردcursor.fetchone()
– می توان برای بدست آوردن تنها ردیف اول از مجموعه نتایج استفاده کرد
برای سادگی، از پرس و جوی SQL “انتخاب همه” استفاده می کنیم و از حلقه for بر روی مجموعه نتایج استفاده می کنیم. fetchall
روش به print رکوردهای فردی
import MySQLdb
dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")
cursor = dbconnect.cursor()
query = "SELECT * FROM movie"
try:
cursor.execute(query)
resultList = cursor.fetchall()
for row in resultList:
print ("Movie ID =", row(0))
print ("Name =", row(1))
print ("Year =", row(2))
print ("Director = ", row(3))
print ('Genre = ', row(4))
except:
print ("Encountered error while retrieving data from database")
finally:
dbconnect.close()
خروجی:
Movie ID = 1
Name = Bruce Almighty
Year = 2003
Director = Tom Shaydac
Genre = Comedy
به روز رسانی یک ردیف
حال اجازه دهید ژانر «بروس متعال» را از کمدی به طنز به روز کنیم:
import MySQLdb
dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")
cursor = dbconnect.cursor()
updatequery = "update movie set genre = 'Satire' where id = 1"
cursor.execute(updatequery)
dbconnect.commit()
print(cursor.rowcount, "record(s) affected")
خروجی:
1 record(s) affected
حذف یک رکورد
در اینجا یک اسکریپت پایتون وجود دارد که روش حذف یک ردیف پایگاه داده را نشان می دهد:
import MySQLdb
dbconnect = MySQLdb.connect("localhost", "pythonuser", "pythonpwd123", "pythondb")
cursor = dbconnect.cursor()
updatequery = "DELETE FROM movie WHERE id = 1"
cursor.execute(updatequery)
dbconnect.commit()
print(cursor.rowcount, "record(s) deleted")
پس از اجرای اسکریپت بالا، اگر همه چیز خوب پیش رفت، باید بتوانید خروجی زیر را ببینید.
خروجی
1 record(s) deleted
نتیجه
در این مقاله روش استفاده از Python DB API برای اتصال به پایگاه داده را یاد گرفتیم. به طور خاص، ما دیدیم که چگونه می توان با استفاده از پیاده سازی MySQLdb Python DB API، یک اتصال به پایگاه داده MySQL برقرار کرد. همچنین روش انجام تراکنش ها با پایگاه داده را یاد گرفتیم.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-25 05:20:05