مدیریت پایگاه داده MySQL با پایتون
یکی از قابلیتهایی که یک زبان برنامهنویسی باید داشته باشد، دسترسی به پایگاههای داده است. پایتون هم از این قاعده مستثنی نیست. پایتون قابلیت ایجاد ارتباط با تقریبا تمامی پایگاههای دادهای که امروزه استفاده میشود، را دارد. در این مقاله قرار است توسط کتابخانهی PyMySQL به پایگاه داده MySQL وصل شویم. توجه کنید این مقاله مناسب افرادی است که به زبان SQL مسلط باشند.
تمامی کدهای این مقاله با پایتون ۳.۶ نوشته شدهاند.
شروع
برای شروع نیاز داریم که MySQL نصب باشد. برای نصب به این لینک بروید و نسخه مطابق با سیستم عامل خود را دانلود و نصب کنید.
سپس با اجرای دستور زیر در خط فرمان کتابخانه PyMySQL را نصب کنید.
pip install PyMySQL
برای مطمئن شدن از نصب این کتابخانه از دستور زیر استفاده کنید:
pip show pymysql
و اگر با موفقیت نصب شده باشد، باید پیغامی مانند عبارت زیر را ببینید:
Name: PyMySQL Version: 0.7.11 Summary: Pure Python MySQL Driver Home-page: https://github.com/PyMySQL/PyMySQL/ Author: INADA Naoki Author-email: songofacandy@gmail.com License: MIT Location: c:\users\user-name\python\lib\site-packages Requires:
ساز و کارِ وصل شدن به پایگاه داده
برای وصل شدن به پایگاه داده باید یک اتصال ایجاد کنیم. ایجاد اتصال با استفاده از متد connect انجام میشود. متد connect پارامترهای میزبان پایگاه داده، نام کاربری، رمز عبور و اسم پایگاه داده را میگیرد و یک اتصال با پایگاه داده ایجاد میکند. سپس باید یک مکاننمایی (cursor) ایجاد کرده تا پیگیری کند که در کجای پایگاه داده قرار داریم. سپس با متد execute دستورات SQL را اجرا میکنیم. بعد از اجرای دستور SQL، باید مقدار عبارتی که مکاننمای ما به آن اشاره میکند را بگیریم. این کار را با متدهای fetchone و fetchall انجام میدهیم. در آخر هم باید اتصال به پایگاه داده را ببندیم که اینکار با متد close انجام میگیرد.
ابتدا پایگاه دادهای با نام zerotohero_db ایجاد میکنیم که دارای یک جدول به نام authors میباشد. این جدول دارای ستونهای last_name، name، id و specialty میباشد. سپس یک رکورد به آن اضافه میکنیم.
create database zerotohero_db; use zerotohero_db; create table authors( id int primary key, first_name varchar(50) not null, last_name varchar(50) not null, specialty varchar(50) not null ); insert into authors values('1', 'navid', 'agz', 'python');
و کد پایتون به صورت زیر میشود:
import pymysql db = pymysql.connect('localhost', 'username', 'password', 'zerotohero_db') cursor = db.cursor() sql = "SELECT VERSION()" cursor.execute(sql) results = cursor.fetchall() print(results) db.close()
و خروجی به صورت زیر میشود:
'۵.۷.۱۱-log'
ایجاد جدول
import pymysql db = pymysql.connect('localhost', 'username', 'password', 'zerotohero_db') cursor = db.cursor() sql = """create table topics( id int primary key, topic_name varchar(50) not null, articles_num int not null)""" cursor.execute(sql) db.close()
درج اطلاعات در پایگاه داده
برای درج داده به صورت زیر عمل میکنیم:
import pymysql db = pymysql.connect('localhost', 'username', 'password', 'zerotohero_db') cursor = db.cursor() author_id = 2 author_name = '\'reza\'' author_last_name = '\'majidi\'' author_specialty = '\'web\'' author_values = str(author_id)+','+str(author_name)+','\ +str(author_last_name)+','+str(author_specialty) sql_1 = "insert into authors values("+author_values+")" topic_id = 1 topic_name = '\'web\'' topic_article_num = 51 topic_values = str(topic_id)+','+str(topic_name)+','+str(topic_article_num) sql_2 = "insert into topics values("+topic_values+")" author_id_1 = 3 author_name_1 = '\'moein\'' author_last_name_1 = '\'bbp\'' author_specialty_1 = '\'ai\'' author_values_1 = str(author_id_1)+','+str(author_name_1)+','\ +str(author_last_name_1)+','+str(author_specialty_1) sql_3 = "insert into authors values("+author_values_1+")" try: cursor.execute(sql_1) cursor.execute(sql_2) cursor.execute(sql_3) db.commit() except: db.rollback() db.close()
در عملیاتهایی که تغییراتی در پایگاه داده ایجاد میکنند، باید از متد commit استفاده شود، تا تغییرات در پایگاه داده اعمال شوند. عمل commit را در try…except گذاشتیم تا اگر مشکلی بوجود آمد دستور اجرا نشود و توسط متد rollback، پایگاه داده به حالت قبل خود بازگردد.
پاک کردن از پایگاه داده
import pymysql db = pymysql.connect('localhost', 'username', 'password', 'zerotohero_db') cursor = db.cursor() sql = 'delete from authors where id=2' try: cursor.execute(sql) db.commit() except: db.rollback() db.close()
بروزرسانی پایگاه داده
import pymysql db = pymysql.connect('localhost', 'username', 'password', 'zerotohero_db') cursor = db.cursor() sql = 'update authors set specialty=\'python and machine learning\' where id=1' try: cursor.execute(sql) db.commit() except: db.rollback() db.close()
خواندن اطلاعات از پایگاه داده
import pymysql db = pymysql.connect('localhost', 'username', 'password', 'zerotohero_db') cursor = db.cursor() sql = 'select * from authors' try: cursor.execute(sql) results = cursor.fetchall() for row in results: print("ROW {}".format(results.index(row))) print("ID: {}\nName: {}\nLast_name: {}\nSpecialty: {}".format(row[0], row[1], row[2], row[3])) print() except: print("Unable to fetch data") db.close()
در مواقعی که بخواهیم یک رکورد از پایگاه داده خود بخوانیم از متد fetchone استفاده میکنیم، در غیر این صورت از fetchall استفاده میکنیم.
در این مقاله سعی شد تا انجام اعمال اصلی بر روی پایگاه داده MySQL پوشش داده شود. همچنین برای متصل شدن به پایگاه داده PostgreSQL میتوایند به مقاله مدیریت پایگاه داده PostgreSQL با پایتون مراجعه کنید.
مطالب زیر را حتما مطالعه کنید
نکاتی که باید پیش از دانلود نمودار ER بدانید
آشنایی با نمودار رابطهای (ER)
آشنایی با توابع در پایتون
راه اندازی Django به همراه Postgresql، Nginx و Gunicorn
آشنایی با حلقه ها در پایتون
آشنایی با رشته در پایتون
4 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
سلام خسته نباشید.
من با کتابخونه mysql-connector-python کار میکنم در کل چطوری باید اطلاعات فارسی رو وارد دیتابیس کرد؟
ممنون
سلام دوست عزیز
موقعی که دارید دیتابیس را میسازید character set رو به صورت زیر روی utf8mb4 ست کنید:
;create database zerotohero_db character set utf8mb4
سلام آموزش های شما بسیار جالب است. فقط اگر می شود آموزش ارتباط mysql (phpmyadmin) که از طریق xampp نصب می شود را با جنگو نیز بگذارید. ممنونم.
سلام. ممنون از نظرتون
متاسفانه همچین ابزاری برای جنگو وجود نداره که تحت وب باشه.
ولی برای مدیریت کردن پایگاه داده به صورت ریموت میتونین از نرم افزاری به نام MySQL Workbench استفاده کنین.
موفق باشید.