احتمالاً تا بهحال شنیدهاید که اتصال پایتون به MySQL فقط با چند خط کد ساده انجام میشود.
اما در عمل، همین چند خط ساده اگر بدون درک درست از نحوه مدیریت اتصالها نوشته شود، خیلی زود تبدیل میشود به جایی که یا دادهها درست ذخیره نمیشوند یا منابع سرور بیدلیل مصرف میشوند.
اتصال پایتون به مای اسکیوال (Python to MySQL) یعنی برقراری ارتباط مستقیم بین کد پایتون و سرور MySQL برای اجرای query، خواندن داده و ثبت اطلاعات. این کار معمولاً با کتابخانههایی مثل mysql-connector-python انجام میشود. در این مقاله قدمبهقدم یاد میگیریم چطور این اتصال را به شکل درست و قابلاعتماد پیادهسازی کنیم و نصب کتابخانه، ساخت connection تا اجرای ایمن کوئریها و جلوگیری از خطاهای رایج را بررسی میکنیم.
فهرست مطالب
پیشنیازهای اتصال پایتون به MySQL

برای اتصال پایتون به MySQL فقط به چند چیز ساده نیاز دارید: یک محیط پایتون فعال، دسترسی به سرور MySQL و کتابخانهای برای برقراری ارتباط بین این دو. در حالت معمول، اگر قصد اتصال به دیتابیس MySQL با Python را دارید، باید اطلاعات اتصال مثل host، user، password و database را از قبل داشته باشید تا در کد استفاده کنید.
اگر دیتابیس روی سیستم خودتان است وضعیت سادهتر است؛ اما برای اتصال پایتون به دیتابیس لوکال MySQL یا سرور ریموت، باید مطمئن شوید پورت MySQL باز است و دسترسی شبکه برقرار شده است. در پروژههای واقعی هم بهتر است قبلاز نوشتن کد، ساختار جدولها و نوع دادههای موردنیاز را بدانید تا بعداً در اجرای query و مدیریت دادهها دچار خطا نشوید.
ابزارهای لازم
برای شروع این مسیر، این ابزارها را آماده کنید:
- Python 3.x
- MySQL Server
- دانلود و نصب VS Code یا PyCharm
- کتابخانه اتصال به MySQL
- اطلاعات ورود به دیتابیس
نکات قبلاز شروع
قبلاز نوشتن کد، این موارد را چک کنید:
- آیا MySQL روی سیستم یا سرور نصب و فعال است؟
- آیا کاربر دیتابیس دسترسی لازم را دارد؟
- آیا نام دیتابیس و جدولها مشخص شدهاند؟
- آیا برای تست اولیه، یک دیتابیس نمونه آماده دارید؟
انتخاب کتابخانه مناسب
برای ارتباط پایتون با دیتابیس MySQL چند کتابخانه رایج وجود دارد، اما در این مقاله ما از mysql connector python استفاده میکنیم؛ چون هم مستندات رسمی MySQL را دارد و هم برای شروع آموزش اتصال پایتون به MySQL از نظر ساختار، قابلفهمتر است.
در مقابل آن، PyMySQL هم گزینهای محبوب و سبک است و در بسیاری از پروژهها برای کار با MySQL در پایتون استفاده میشود. این کتابخانه ازنظر نحوه استفاده شباهت زیادی به Connector دارد و برای مواقعی که میخواهید بهسرعت یک اتصال بسازید یا با queryها کار کنید مناسب است.
مقایسه mysql‑connector‑python و PyMySQL
| ویژگی | mysql connector python | PyMySQL |
|---|---|---|
| نوع | کتابخانه رسمی MySQL | کتابخانه شخص ثالث، سبک |
| نصب و شروع | ساده، مستندات رسمی | ساده، مستندات خوب |
| پرفورمنس | پایدار و استاندارد | سریع و کمحجم |
| مناسب برای | آموزش، پروژههای استاندارد، کارهای سازمانی | پروژههای سبک و اسکریپتی |
| مزیت اصلی | سازگاری کامل با MySQL Server | سرعت و سادگی |
نصب mysql connector در پایتون
برای شروع اتصال Python به MySQL باید کتابخانه رسمی که در بخش قبل اشاره کردیم، یعنی mysql connector python را نصب کنید. این کتابخانه همان چیزی است که امکان برقراری ارتباط، اجرای query و خواندن و نوشتن داده در MySQL با Python را فراهم میکند.
دستور نصب
کافی است در ترمینال یا CMD دستور زیر را اجرا کنید:
pip install mysql-connector-python
بررسی نصب
برای اطمینان از نصب صحیح، یک تست سریع اجرا کنید:
import mysql.connector
print("OK")
اگر خروجی بدون خطا اجرا شد، نصب درست انجام شده و آماده ساخت اتصال هستید.
اتصال پایتون به دیتابیس MySQL
در این مرحله، اولین اتصال رسمی بین پایتون و MySQL را میسازیم. این اتصال پایهایترین بخش کار با MySQL Server در Python است و دقیقاً همان چیزی است که امکان ارسال درخواست SQL و اجرای query را فراهم میکند. چه قصد کار با دیتابیس در backend را داشته باشید و چه بخواهید به دیتابیس ریموت MySQL در یک سرور ابری متصل شوید، ساخت Connection و Cursor اولین قدم است.
ساخت اتصال
نمونه اتصال پایه:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="your_user",
password="your_password",
database="your_db",
port=3306
)
پارامترهای مهم اتصال
- host: آدرس سرور؛ در اتصال لوکال معمولاً localhost و در اتصال ریموت IP سرور
- user: نام کاربری MySQL
- password: رمز عبور کاربر
- database: نام دیتابیسی که قصد کار با آن را دارید.
- port: پورت MySQL (پیشفرض: 3306)
نکته: برای اتصال Python به phpMyAdmin یا MySQL Workbench، از همین پارامترها استفاده میشود، فقط host و user مطابق تنظیمات همان محیط است.
بررسی اتصال
برای بررسی موفق بودن اتصال و جلوگیری از خطا در ادامه کار:
if connection.is_connected():
print("Connection established!")
اگر پیام بالا چاپ شد، اتصال برقرار است و میتوانید وارد مرحله اجرای query شوید. اگر خطا دریافت کردید، احتمالاً رمز اشتباه است، دسترسی کاربر محدود شده یا MySQL Server درحال اجرا نیست.
اجرای دستورات SQL
وقتی اتصال برقرار شد، مرحله بعدی اجرای query در MySQL با Python است. در این بخش از آبجکت مهمی به نام cursor استفاده میکنیم. Cursor درواقع رابط اجرایی شما است؛ یعنی هر دستور SQL با همین شیء اجرا میشود. اگر بخواهید کار با MySQL در پایتون را حرفهای انجام دهید، شناخت cursor مهمترین قدم بعداز اتصال است، چون کنترل کامل اجرای دستور، مدیریت نتایج و حتی commitکردن تغییرات را برعهده دارد.
ساخت جدول
در اولین قدم، یک جدول ساده میسازیم. این دستور میتواند در دیتابیس لوکال یا حتی با اتصال پایتون به دیتابیس ریموت MySQL اجرا شود:
cursor = connection.cursor()
create_table = """
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
)
"""
cursor.execute(create_table)
print("Table created!")
درج داده
برای نوشتن داده در MySQL با Python از INSERT استفاده میکنیم. نکته مهم: تغییرات باید commit شوند تا در دیتابیس ذخیره شوند.
insert_query = "INSERT INTO users (name, email) VALUES (%s, %s)"
data = ("Ali", "ali@example.com")
cursor.execute(insert_query, data)
connection.commit()
print("Data inserted!")
خواندن داده
برای خواندن اطلاعات از SELECT استفاده میکنیم. دو متد مهم وجود دارد:
- fetchone: فقط یک ردیف را برمیگرداند.
- fetchall: تمام نتایج را یکباره برمیگرداند.
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for r in rows:
print(r)
مثال UPDATE
برای تغییر یک رکورد موجود:
update_query = "UPDATE users SET email=%s WHERE id=%s"
cursor.execute(update_query, ("new@mail.com", 1))
connection.commit()
print("Row updated!")
این فرایند -ایجاد جدول تا بهروزرسانی- پایه تمام عملیات مدیریت دیتابیس با Python است؛ چه برای استفادههای آموزشی و چه هنگام استفاده از MySQL در پروژههای وب و چه هنگام کار روی اجرای MySQL روی سرور ابری یا یک سرور پردازش سریع برای دیتابیس.
مدیریت خطا و بستن اتصال
در هر ارتباط با دیتابیس -مخصوصاً هنگام اتصال Python به دیتابیس در سرور یا کار با دیتابیس- مدیریت خطا ضروری است. خطاهایی مثل اشتباه بودن رمز، قطع بودن MySQL Server یا مشکل در شبکه میتوانند اجرای برنامه را متوقف کنند. برای همین، بهترین روش استفاده از بلوک try/except و قراردادن قسمت بستهشدن connection در finally است تا حتی درصورت بروز خطا، منابع آزاد شوند. این دقیقاً چیزی است که در آموزش کار با mysql connector در پایتون بهعنوان استاندارد توصیه میشود.
استفاده از try/except
قطعه کد زیر برای مدیریت خطا است:
try:
connection = mysql.connector.connect(...)
cursor = connection.cursor()
cursor.execute("SELECT 1")
print("Connected!")
except mysql.connector.Error as err:
print("Error:", err)
این الگو خطاهای رایج مانند Can’t connect to MySQL server یا Access Denied یا مشکلات شبکه را مدیریت میکند.
بستن امن اتصال
بستن connection و cursor همیشه باید در بلوک finally انجام شود تا از نشت منابع جلوگیری شود:
finally:
if cursor:
cursor.close()
if connection and connection.is_connected():
connection.close()
print("Connection closed.")
این ساختار تضمین میکند حتی اگر وسط اجرای query در MySQL با Python خطایی رخ بدهد، برنامه تمیز و امن پایان پیدا کند.
اسکریپت کامل اتصال به MySQL
import mysql.connector
def main():
connection = None
cursor = None
try:
# 1) اتصال به MySQL
connection = mysql.connector.connect(
host="localhost",
user="root",
password="your_password",
database="testdb"
)
cursor = connection.cursor()
print("Connection established.\n")
# 2) ساخت جدول (اگر وجود نداشته باشد)
create_table = """
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
)
"""
cursor.execute(create_table)
print("Table checked/created.\n")
# 3) درج داده نمونه
insert_query = "INSERT INTO users (name, email) VALUES (%s, %s)"
sample_data = ("Ali", "ali@example.com")
cursor.execute(insert_query, sample_data)
connection.commit()
print("Sample data inserted.\n")
# 4) خواندن دادهها
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
print("Users in database:")
for row in rows:
print(row)
except mysql.connector.Error as err:
print("Database Error:", err)
except Exception as e:
print("General Error:", e)
finally:
# 5) بستن cursor و اتصال
if cursor:
cursor.close()
if connection and connection.is_connected():
connection.close()
print("\nConnection closed. Program finished.")
if __name__ == "__main__":
main()
خطاهای رایج اتصال پایتون به MySQL
معمولاً در نحوه اتصال Python به دیتابیس MySQL چند خطای تکراری وجود دارد که بیشتر کاربران تازهکار با آنها روبهرو میشوند. بیشتر این مشکلات به نصب کتابخانه، اطلاعات اتصال یا دسترسیهای دیتابیس مربوط است.
جدول زیر رایجترین خطاها در کار با MySQL در پایتون را به همراه علت و راهحل آنها نشان میدهد.
| خطا | علت رایج | راهحل |
|---|---|---|
| ModuleNotFoundError: No module named ‘mysql’ | نصب نبودن یا نصب اشتباه mysql-connector-python | اجرای pip install mysql-connector-python |
| Access denied for user | اشتباه بودن user یا password | بررسی مجدد اطلاعات ورود |
| Can’t connect to MySQL server | اجرا نبودن MySQL Server یا اشتباه بودن host/port | بررسی اجرای سرویس MySQL و پورت 3306 |
| Unknown database | اشتباه بودن نام دیتابیس | بررسی نام دقیق دیتابیس در MySQL |
| Table doesn’t exist | اشتباه بودن نام جدول | چک کردن ساخت جدول با SHOW TABLES |
| تغییرات ذخیره نمیشوند | فراموش کردن commit() | بعد از INSERT یا UPDATE حتماً connection.commit() اجرا کنید |
| خطای SQL Syntax | اشتباه در query | بررسی ساختار SQL |
| مشکل encoding | ناسازگاری charset با دادههای فارسی | استفاده از charset مناسب مثل utf8mb4 |
| رفتار ناپایدار برنامه | بسته نشدن connection یا cursor | بستن اتصال در finally |
چکلیست سریع برای خطایابی اتصال
اگر اتصال شما برقرار نشد، این ترتیب معمولاً سریعترین راه برای پیداکردن مشکل است:
۱- بررسی اجرای MySQL Server
مطمئن شوید سرویس MySQL فعال است.
۲- بررسی اطلاعات اتصال
این موارد را دوباره چک کنید: host – user – password – database – port
تست اتصال با try/except
try:
connection = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="testdb"
)
print("Connection OK")
except mysql.connector.Error as err:
print("Error:", err)
۴- استفاده از query امن
هنگام اجرای query در MySQL با Python از پارامترها بهجای اتصال رشتهای استفاده کنید.
روش ناامن:
query = "SELECT * FROM users WHERE name='" + name + "'"
روش درست:
query = "SELECT * FROM users WHERE name=%s"
cursor.execute(query, (name,))
۵- فراموش نکردن commit و close
- بعداز تغییر دادهها → commit()
- در پایان برنامه → cursor.close() و connection.close()
اجرای دیتابیس در پروژههای واقعی
اتصال پایتون به MySQL در محیط لوکال مقدمه کار است. وقتی پروژه وارد فاز جدیتری -مثل اجرای یک API، فروشگاه آنلاین یا هر نوع سرویس با کاربران همزمان- میشود، دیتابیس باید روی سروری بر بستر ابری اجرا شود که پایداری، امنیت و سرعت پردازش کوئریها را تضمین کند. در مرحلهی پروداکشن، فقط نمایش «اتصال برقرار شد» پایان کار نیست. مواردی مثل آیتمهای زیر همه تبدیل به دغدغههای اصلی میشوند:
- زمان پاسخدهی (Latency)
- آپتایم واقعی سرور
- توان پردازش همزمان کوئریها
- امنیت و مجوزهای دسترسی
- مقیاسپذیری هنگام رشد پروژه
اگر هنوز با مفهوم سرور ابری آشنا نیستید، مقاله زیر بهترین نقطه شروع برای شما است:
چرا اجرای MySQL روی سرور ابری توصیه میشود؟
وقتی بحث استفاده از MySQL در پروژههای وب یا اجرای دیتابیس در محیط پروداکشن مطرح است، انتخاب زیرساخت تاثیر مستقیمی روی پایداری کل سیستم دارد. سرور پردازش سریع برای دیتابیس باید بتواند در هر شرایطی -حتی زیر فشار هزاران درخواست همزمان- پاسخگو باشد. سرور ابری ابر فردوسی دقیقاً برای همین هدف ساخته شده است.
مزایای اجرای MySQL روی ابر فردوسی
- پردازش بسیار سریع: مناسب برای Queryهای سنگین و دیتابیسهای پرترافیک
- آپتایم واقعی: زیرساخت پایدار، مناسب اجرای MySQL در پروژههای وب و APIهای حساس
- مقیاسپذیری لحظهای: هر زمان نیاز باشد CPU، RAM یا فضای ذخیرهسازی افزایش مییابد.
- ایزولهسازی امنیتی: اجرای دیتابیس در محیط امن با کنترل کامل روی پورتها، فایروال و کاربران
- پشتیبانی متخصصان ابری: مخصوص زمانی که سرور دیتابیس نقش ستون کسبوکار شما را ایفا میکند.
- سختافزار بروز: بهرهگیری از رم های DDR4 و هارد NVME بهینه برای پردازش سریع
- پرداخت ساعتی: امکان پرداخت هزینه بهازای مصرف، بدون نیاز به پرداخت در ساعات خاموشی سرور
شما همین الان میتوانید با ۱۰۰ هزارتومان اعتبار رایگان ابر فردوسی، قدرت زیرساختهای ما را امتحان کنید و با خیالی آسوده بهترین امکانات را برای توسعه کسبوکار خود اجاره کنید.
جمعبندی
در ظاهر، اتصال پایتون به MySQL فقط چند خط کد است؛ اما تفاوت بین یک اتصال ساده و یک پیادهسازی قابلاعتماد، دقیقاً در جزئیاتی است که در این مسیر یاد گرفتید. مواردی مثل ساخت connection و کار با cursor و مدیریت خطا و اجرای ایمن کوئریها، هرکدام نقش مهمی در این دارند که دیتابیس شما در یک پروژه واقعی بدون دردسر کار کند. اگر قرار است این اتصال را در یک پروژه جدی استفاده کنید، پیشنهاد میکنم قبل از هر چیز، همین ساختار را روی یک سناریوی واقعی (مثل ثبتنام کاربر یا ذخیره داده) پیادهسازی کنید تا چالشهای واقعی را ببینید.
اگر تجربهای در کار با MySQL دارید یا جایی از این مسیر به مشکل خوردید، خوشحال میشوم در کامنتها بنویسید. اتفاقاً بیشتر نکات مهم، از همین تجربهها بیرون میآید.
منبع:
خطاهای مای اسکیوال | انجمن پایتون | مای اسکیوال | نمونه اتصال | pymysql | مقایسه کتابخانههای اتصال
سؤالات متداول
بهترین کتابخانه برای اتصال پایتون به MySQL کدام است؟
برای پروژههای استاندارد و آموزشی، کتابخانه رسمی mysql-connector-python بهترین و مطمئنترین گزینه است. اگر بهدنبال یک جایگزین سبکتر هستید که نیازی به کامپایل نداشته باشد، کتابخانه PyMySQL نیز بسیار محبوب و پرکاربرد است.
چرا خطای “No module named mysql” را دریافت میکنم؟
این خطا یعنی پایتون نمیتواند کتابخانه متصلکننده را پیدا کند. دلیل آن معمولاً فراموشکردن نصب کتابخانه یا اجرای کد در یک محیط مجازی (Virtual Environment) اشتباه است. با اجرای دستور pip install mysql-connector-python در ترمینالِ محیط فعال خود، مشکل حل میشود.
چرا بعد از اجرای دستورات INSERT و UPDATE تغییرات در دیتابیس ذخیره نمیشوند؟
در کار با پایگاه داده ازطریق پایتون، تغییرات بهصورت پیشفرض ذخیره نمیشوند. حتماً باید بعداز اجرای کوئریهای تغییر داده، متد connection.commit() را فراخوانی کنید تا تغییرات نهایی و ثبت شوند.
چگونه از حملات SQL Injection هنگام اجرای کوئری جلوگیری کنیم؟
هرگز مقادیر متغیرها را با رشتههای SQL ترکیب نکنید. همیشه از روش کوئریهای پارامتریک استفاده کنید؛ یعنی در متن کوئری از %s استفاده کنید و متغیرها را در قالب یک Tuple به متد execute پاس بدهید.
دلیل خطای “Access denied for user” چیست؟
این خطا زمانی رخ میدهد که اطلاعات هویتی رد شده باشد. دلیل آن معمولاً یکی از این سه مورد است: نام کاربری اشتباه است، رمز عبور غلط وارد شده یا کاربر دیتابیس دسترسی (Privileges) لازم برای اتصال از آن IP یا کار روی آن دیتابیس خاص را ندارد.
خطای “Can’t connect to MySQL server” چگونه برطرف میشود؟
ابتدا مطمئن شوید که سرویس MySQL روی سیستم یا سرور درحال اجرا است. سپس آدرس Host (مثل localhost یا IP سرور) و پورت (پیشفرض 3306) را بررسی کنید. اگر به یک دیتابیس ریموت (مثلاً روی سرور ابری) متصل میشوید، بسته بودن پورت توسط فایروال اصلیترین دلیل این خطا است.
آیا کدهای اتصال به MySQL در محیط VS Code با محیطهای دیگر تفاوت دارد؟
خیر؛ کد پایتون کاملاً مستقل از ویرایشگر (IDE) است. منطق و کدی که برای اتصال به MySQL مینویسید در VS Code، PyCharm، Jupyter یا حتی یک فایل متنی ساده که در ترمینال اجرا میشود کاملاً یکسان است.
چگونه همه رکوردهای یک جستجو را یکجا استخراج کنم؟
بعداز ارسال دستور SELECT ازطریق cursor.execute، کافی است متد cursor.fetchall() را صدا بزنید. این متد تمامی نتایج یافتشده را در قالب لیستی از تاپلها به شما برمیگرداند تا بهراحتی روی آنها یک حلقه (Loop) ایجاد کنید.
چرا بستن Connection و Cursor در پایان کار الزامی است؟
باز گذاشتن اتصالات باعث اشغال منابع سرور دیتابیس میشود. اگر اتصالات متعددی باز بمانند، ممکن است سرور به سقف مجاز اتصالات برسد و از کار بیفتد (Crash). همیشه اتصالات را در بخش finally بلوک try/except ببندید تا حتی درصورت بروز خطا ارتباط بهدرستی قطع شود.

