در اکثر برنامهها باید دادههایی را ذخیره و بازیابی کنیم. معمولاً این کار را با پایگاه داده یا دیتابیس انجام میدهیم. یادگیری کار با دیتابیس در هر زبانی از جمله پایتون بسیار مهم و برای ایدههای ما راهگشاست. در این آموزش نحوه کار با دیتابیس MySQL در پایتون را یاد میگیریم. در انتها نیز چند دیتابیس معروف جایگزین را معرفی میکنم.
هنگام کار با دیتابیس (database) چهار عملیات اصلی داریم: ساختن (Create)، خواندن (Read)، بهروزرسانی (Update) و حذف (Delete). حروف اول این کلمات کنار هم اصطلاح CRUD را ایجاد کرده است. پس اگر جایی «CRUD در پایتون» به گوشتان خورد منظور همین کار کردن با دیتابیس است.
روند کلیِ کار با پایگاه داده را در ۳ گام خلاصه میکنم:
ابتدا نیازمندیهای MySQL را بررسی کرده و سپس با آن کار میکنیم. اگر میخواهید با دیتابیس دیگری کار کنید، در انتهای آموزش چند دیتابیس معروف و خوب را معرفی کردهام.
فهرست محتوای آموزش
پیش از هر چیزی باید یک سرور MySQL در اختیار داشته باشیم. روشهای متفاوتی برای دسترسی یا نصب آن وجود دارد:
حالا باید درایور (driver) و ماژولی برای ارتباط با mysql را نصب کنیم. اکثراً از ماژول MySQL Connector (در گیت هاب) استفاده میکنند. در این آموزش هم از همین ماژول کمک میگیریم.
برای نصب از pip پایتون استفاده میکنم. اگر pip در سیستمتان تعریف شده، هر دو دستور و در غیر اینصورت از دستور دوم میتوانید استفاده کنید:
pip install mysql-connector-python
python -m pip install mysql-connector-python
حالا بریم سراغ استفاده از آن…
در ابتدا، باید این ماژول را وارد برنامه کنیم. من علاوه بر import کردن، یک اسم مستعارِ کوتاهتر در نظر گرفتم. اگر با این ساختار آشنا نیستید، دیدن جلسهی ماژول در پایتون را به شما پیشنهاد میکنم.
import mysql.connector as mysql
پیش از ادامه، اگر با ساختار استفاده از دیتابیس آشنا نیستید یک توضیح کوتاه میدهم. ما یک سرور (بهنوعی مدیریتکنندهٔ دادهها) داریم. در این سرور، میتوانیم چندین دیتابیس داشته باشیم. هر دیتابیس معمولاً برای یک برنامه یا بخشی از برنامههای بزرگتر است. مثلاً برای یک سایت خبری، در حالت عادی یک دیتابیس ایجاد میکنیم.
در دیتابیسهای رابطهای (مثل MySQL)، درون هر دیتابیس چند جدول وجود دارد. دقیقاً مشابه جداولی که میشناسیم، هر جدول شامل دو بخش کلی است:
اکنون باید به سرور پایگاه داده MySQL وصل شویم. برای این کار از متد connect()
استفاده میکنم. معمولاً به ۲ حالت عملیات اتصال را انجام میدهیم.
اولین حالت، اتصال به سرور است. اگر در سرور خود هنوز دیتابیسی (database مربوط به برنامهتان و نه جداول آن) را نساختهاید، این روش را استفاده کنید.
db = mysql.connect( host = "localhost", user = "username", password = "pass"
)
سه آرگومان ورودی عبارتاند از: (اگر با ساختار توابع و استفاده از آنها آشنا نیستید، جلسه تابع در پایتون را ببینید.)
در بخش اجرای دستورات یاد میگیریم چطور دستور ساخت دیتابیس را اجرا کنیم.
دومین حالت زمانی استفاده میشود که میخواهیم به دیتابیس موردنظرمان وصل شویم.
db = mysql.connect( host = "localhost", user = "username", password = "pass" database = "python_test"
)
آرگومان چهارم که در این دستور اضافه شده، نام دیتابیس است.
معمولاً در ابتدای کار، مشابه دستور قبلی تلاش میکنیم اگر دیتابیسی وجود ندارد آن را ایجاد کنیم. بعد از آن برای کار با دیتابیس در پایتون همیشه از حالت بالایی استفاده کرده و مستقیماً به پایگاه داده [تعریف پایگاه داده] متصل میشویم.
از این مرحله به بعد، کارهای اصلیای که در کار با دیتابیس با پایتون انجام میدهیم را گام به گام یاد میگیریم. برای اجرای هر دستور، سه قدم داریم:
فرض کنید هنوز دیتابیسی ایجاد نکردهایم. بنابراین باید ابتدا به سرور متصل و سپس دستور SQL مربوط به ایجاد دیتابیس را اجرا کنیم. به کد زیر توجه کنید:
import mysql.connector as mysql
db = mysql.connect( host = "localhost", user = "username", password = "pass"
)
cursor = db.cursor()
cursor.execute("CREATE DATABASE python_test")
db.close()
در این قطعه کد، بعد از اتصال، با صدا زدن متد cursor()
روی شیء db
اشارهگر خودمان را ایجاد کردیم. سپس با دستور execute()
دستور SQL (اصطلاحاً کوئری SQL) موردنظرمان را اجرا کردیم. در نهایت ارتباطمان با دیتابیس را قطع کردیم. (اگر نمیدانید شیء چیست، احتمالاً آموزش اصول برنامهنویسی شیء گرا برایتان کاربردی باشد.)
اگر بعد از اجرای کوئری، هنوز هم میخواهید با دیتابیس در پایتون کار کنید، نیازی به بستن ارتباط نیست. دستور close()
را زمانی استفاده کنید که کارتان با دیتابیس تمام شده است؛ شاید انتهای برنامه!
حالا که دیتابیس ایجاد شد، باید جدولِ دادههایمان را ایجاد کنیم. بنابراین کدی شبیه زیر مینویسم:
import mysql.connector as mysql
db = mysql.connect( host = "localhost", user = "username", password = "pass" database = "python_test"
)
cursor = db.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS students (id INT AUTO_INCREMENT, name VARCHAR(255), course VARCGAR(255))")
db.close()
در اینجا، بررسی کردیم اگر جدولی به نام students وجود نداشت، یک جدول با سه ستونِ شناسه (id)، نام (name) و درس (course) ایجاد کند. مقدار id بهصورت عددی با افزایش خودکار و دو ستون دیگر بهصورت رشته متنی در نظر گرفتم.
برای کار کردن با دیتابیس در هر زبانی از جمله python، باید از کوئریهای زبان SQL استفاده کنید. اگر با این زبان آشنا نیستید و میخواهید مستقیماً با دیتابیس کار کنید، پیشنهاد میکنم این زبان ساده را آموزش ببینید. البته نیاز نیست دستورات را حفظ کنید، همینکه بدانید چه امکاناتی دارید و برایش جستجو کنید کافی است!
برای افزودن داده به جدول دیتابیس خود با پایتون، مشابهاً باید یک دستور SQL بنویسیم. برای افزودن از دستور INSERT در SQL استفاده میکنم:
sql = "INSERT INTO students (name, course) VALUSE ('Omid', 'python')"
کافی است این کوئری را در دیتابیس اجرا کنیم.
cursor.execute(sql)
db.commit()
نکته مهم: اگر کوئری ما تغییری در دادههای دیتابیس ایجاد میکند (مثل همین افزودن)، حتماً باید تغییرات را ثبت (اصطلاحاً commit) کنیم. برای این کار از متد commit()
در شیٔ db
استفاده میکنم.
اکثراً دادههایی که میخواهیم در دیتابیس ذخیره کنیم در یک متغیر دیگر وجود دارند و کمتر پیش میآید که آنها را مستقیماً در کوئری بنویسیم. در قطعه کد زیر، نام و اسم درس را به صورت یک تاپل یا tuple پایتون به تابع execute()
دادهام تا اجرا شود.
sql = "INSERT INTO students (name, course) VALUSE (%s, %s)"
valuues = ("Fateme", "python")
cursor.execute(sql, values)
db.commit()
در کوئری sql از %s
برای مشخص کردن متغیر و نوع آن (s = string یا رشته در پایتون) استفاده میکنیم.
برای سادگی خوانایی کدها، از اینجا به بعد دستورات import، اتصال به دیتابیس، ایجاد cursor و در انتها close را نمینویسم.
گاهی لازم است چندین داده (سطر) را به جدول اضافه کنیم. در این حالت از موارد زیر استفاده میکنیم:
executemany()
برای اجرای کوئریدستور SQL و نحوه فراخوانی تابع و متغیرها مشابه قبل است، صرفاً باید از متد executemany()
استفاده کنیم:
sql = "INSERT INTO students (name, course) VALUSE (%s, %s)"
students = [("Ehsan", "GIT & GITHub"), ("Ghazal", "PHP"), ("Reyhane", "python"), ("Iman", "WP Dev")]
cursor.executemany(sql, students)
db.commit()
گاهی بعد از افزودن داده به دیتابیس با پایتون لازم داریم بدانیم چند سطر به جدول اضافه شده، یا مثلاً شناسه (id) آخرین سطر چقدر است؟ بعد از commit کردن میتوانیم از ویژگیهای شیء cursor استفاده کنیم.
دور مورد از کاربردیترین ویژگیها را در جدول زیر میبینید:
rowcount | تعداد سطرهای اضافهشده |
lastrowid | شناسهٔ آخرین سطرِ اضافهشده |
مثلاً بعد از اجرای قطعه کد بالا (افزودن چند داده و commit()
آن) میتوانم این مقداری را چاپ کنم:
print(cursor.rowcount, "Record Inserted!")
print("Last ID is: ", cursor.lastrowid)
برای خواندن دادهها از جدول از دستور SELECT در SQL استفاده کرده و برای مشاهدهٔ نتایج از متد fetchall()
روی cursor استفاده میکنیم.
sql = "SELECT * FROM students"
cursor.execute(sql)
result = cursor.fetchall()
اکنون میتوانیم با حلقه for در پایتون روی نتایج حرکت کرده و دادههایی که از دیتابیس خواندیم را پردازش کنیم. در اینجا من صرفاً آنها را چاپ میکنم:
for item in result: print(item)
خروجیِ ما چیزی شبیه زیر میشود:
با fetchall()
همهٔ سطرها در متغیر result قرار داده شد. گاهی میخواهیم این کار را سطر به سطر انجام دهیم. برای خواندن یک سطر از نتایج از fetchone()
استفاده میکنیم:
sql = "SELECT * FROM students"
cursor.execute(sql)
result = cursor.fetchone()
print(result)
# output: (1, "Omid", "python")
البته اگر میخواهید صرفاً یک سطر یا یک فرد خاص را از دیتابیس بخوانید، بهتر است بهجای SELECT *
از شرطهای WHERE یا LIMIT در SQL کمک بگیرید.
در بهروزرسانی بعدی (وسط مرداد ۱۴۰۱)، کوئریهای خاصتر را بهعنوان مثال بیشتر اضافه میکنم.
در این آموزش با نحوه اتصال و کار با دیتابیس MySQL در پایتون آشنا شدیم. فهمیدیم که ابتدا باید یک سرور MySQL داشته باشیم؛ ممکن است این سرور روی سیستم محلی نصب شده باشد یا روی یک سرور دیگر در شبکه یا اینترنت باشد.
سپس با نصب درایور آن و ماژول mysql.connector میتوانیم از متدها و ویژگیهای لازم استفاده کنیم. (بیشتر بیاموزید: ماژول پایتون)
در ابتدای کارمان با تابع connect()
به دیتابیس متصل میشدیم. این تابع یک شیء به ما میداد که از آن برای ادامهٔ کار استفاده میکنیم. در انتها نیز همیشه بهتر است ارتباطی که باز کردهایم را با متد close()
روی همین شیء ببندیم. بعد از اتصال باید یک cursor ایجاد کنیم.
از تابع execute()
برای اجرای دستورات SQL (همان queryها) استفاده میکردیم. میتوانیم دستور را مستقیماً ورودی دهیم یا همراه با پارامتر متغیر تعریف کنیم.
برای دیدن نتایج اجرای کوئری SELECT نیز از fetchall()
یا fetchone()
استفاده میکنیم.
یادتان باشد، اگر تغییری در دادههای دیتابیس ایجاد کردید، حتماً تغییرات را commit()
کنید، وگرنه تغییراتتان ثبت نمیشود!
ممکن است در پروژههای مختلف بنا به نیازتان بخواهید یا مجبور باشید از دیتابیسهای دیگر غیر از MySQL استفاده کنید. این دیتابیس یک پایگاه دادهٔ رابطهای (RBD) است.
در اینجا ۴ دیتابیس دیگر را معرفی کردم که میتوانید از آن در برنامهنویسی پایتون استفاده کنید:
امیدوارم از این آموزش استفادهٔ لازم را ببرید. اگر در حال یادگیری پایتون هستید، پیشنهاد میکنم همین الآن یک دیتابیس ایجاد کرده و چند دستور SQL درون آن اجرا کنید.
اگر با کوئریها آشنا نیستید، میتوانید جستجو کنید یا از کوئریهای همین آموزش الگو بگیرید. همچنین اگر سؤال یا تجربهای دارید، از بخش دیدگاهها مطرح کنید. سون لرن • آموزش...
برچسب : نویسنده : استخدام کار 7learn بازدید : 158