اتصال به پایگاه داده (Database) در پایتون

وقتی یک برنامه اطلاعاتی را از کاربر دریافت می‌کند، معمولاً لازم است این اطلاعات را برای استفاده‌های بعدی ذخیره کند. برای مثال، در یک برنامه ثبت‌نام دانش‌آموزان، اطلاعاتی مانند نام، نام خانوادگی، سن و شماره تماس باید جایی ذخیره شوند تا بعداً بتوان آنها را مشاهده، ویرایش یا حذف کرد. روش‌ مناسب برای ذخیره و مدیریت حجم زیادی از اطلاعات، استفاده از پایگاه داده (Database) است.

 

فهرست مطالب

پایگاه داده چیست؟

پایگاه داده محلی برای ذخیره و سازمان‌دهی اطلاعات است؛ به‌گونه‌ای که برنامه بتواند به‌سادگی اطلاعات را ذخیره، جست‌وجو، تغییر و حذف کند. برای مثال، فرض کنید می‌خواهیم اطلاعات دانش‌آموزان یک مدرسه را ذخیره کنیم:

نامنام خانوادگیسنمعدل
علیاحمدی1618.5
سارامحمدی1719.2
رضاکریمی1617.8

ذخیره کردن چنین اطلاعاتی در متغیرها یا حتی فایل‌های معمولی، با بزرگ‌تر شدن برنامه دشوار می‌شود. پایگاه داده برای مدیریت چنین اطلاعاتی طراحی شده است.

SQLite چیست؟

برای شروع کار با پایگاه داده در پایتون، از SQLite استفاده می‌کنیم. SQLite یک سیستم مدیریت پایگاه داده سبک است که اطلاعات را در یک فایل ذخیره می‌کند. برخلاف بعضی پایگاه‌های داده مانند MySQL، برای استفاده از SQLite نیازی به نصب و اجرای یک سرور جداگانه نداریم.

نکته مهم این است که پایتون به‌صورت پیش‌فرض ماژول sqlite3 را در اختیار ما قرار می‌دهد؛ بنابراین برای شروع کار با SQLite معمولاً نیازی به نصب کتابخانه اضافی نداریم. ساختار کلی کار ما به این صورت خواهد بود:

Python → sqlite3 → SQLite Database

در ادامه یاد می‌گیریم چگونه این ارتباط را برقرار کنیم.

اتصال پایتون به پایگاه داده

برای کار با SQLite ابتدا باید ماژول sqlite3 را با دستور ایمپورت وارد برنامه کنیم:

import sqlite3

سپس با استفاده از تابع ()connect به پایگاه داده متصل می‌شویم:

import sqlite3
connection = sqlite3.connect("school.db")

دقت کنید که در کد بالا:

  • sqlite3 ماژول مربوط به SQLite است.
  • connect() برای ایجاد اتصال به پایگاه داده استفاده می‌شود.
  • "school.db" نام فایل پایگاه داده است.
  • connection متغیری است که اتصال ایجادشده را در خود نگه می‌دارد.

اگر فایل school.db وجود نداشته باشد، SQLite آن را ایجاد می‌کند. بنابراین بعد از اجرای این برنامه، یک فایل با نام:

school.db

در پوشه پروژه ایجاد خواهد شد. حالا کد بالا را کاملتر می‌کنیم:

import sqlite3
connection = sqlite3.connect("school.db")
print("اتصال به پایگاه داده با موفقیت انجام شد.")
connection.close()

در پایان، با استفاده از دستور:

connection.close()

اتصال پایگاه داده را می‌بندیم. دقت کنید که بستن اتصال بعد از اتمام کار مهم است. زیرا برنامه نباید اتصال‌های غیرضروری را باز نگه دارد.

متغیر connection چه کاری انجام می‌دهد؟

متغیر connection در واقع نماینده ارتباط برنامه پایتون با پایگاه داده است. بعداً از همین اتصال برای انجام کارهایی مانند ساخت جدول، ذخیره اطلاعات، خواندن اطلاعات، ویرایش اطلاعات و حذف اطلاعات استفاده خواهیم کرد. برای مثال، در ادامه مسیر برنامه ما چیزی شبیه این خواهد شد:

import sqlite3
connection = sqlite3.connect("school.db")

# کار با پایگاه داده

connection.close()

فعلاً قسمت «کار با پایگاه داده» خالی است. در اداه درس‌ یاد می‌گیریم چگونه در همین قسمت جدول ایجاد کنیم و اطلاعات را داخل آن قرار دهیم.

یک نکته مهم

فایل school.db یک فایل معمولی متنی نیست که بتوانیم آن را با Notepad باز کنیم و اطلاعات را به‌صورت خوانا ببینیم. این فایل ساختار مخصوص پایگاه داده SQLite را دارد و برنامه‌ها از طریق SQL و ماژول sqlite3 با اطلاعات داخل آن کار می‌کنند.

کار با Cursor در SQLite

حالا که به پایگاه داده متصل شدیم، باید راهی داشته باشیم تا بتوانیم دستورهای SQL را روی آن اجرا کنیم. برای این کار از چیزی به نام Cursor استفاده می‌کنیم. Cursor را می‌توانیم به‌عنوان ابزاری در نظر بگیریم که از طریق آن به پایگاه داده دستور می‌دهیم و نتیجه اجرای دستورات را دریافت می‌کنیم. برای ایجاد Cursor، از متد ()cursor استفاده می‌کنیم:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
connection.close()

در این کد:

cursor = connection.cursor()

یک Cursor ایجاد کرده و آن را در متغیر cursor قرار داده‌ایم.

اجرای دستور SQL با execute()

برای اجرای دستورات SQL از متد ()execute استفاده می‌کنیم. مثلاً می‌توانیم با استفاده از دستور CREATE TABLE یک جدول برای دانش‌آموزان ایجاد کنیم:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    CREATE TABLE students (
        id INTEGER,
        name TEXT,
        age INTEGER,
        grade REAL
    )
""")
connection.close()

در این مثال، جدول students ایجاد می‌شود که چهار ستون به شکل زیر دارد:

ستوننوع دادهکاربرد
idINTEGERشماره دانش‌آموز
nameTEXTنام دانش‌آموز
ageINTEGERسن
gradeREALمعدل

چند نوع داده مهم در SQLite

در این مرحله همین چند نوع داده برای ما کافی است:

INTEGER

برای اعداد صحیح  معادل int در پایتون. مانند:

16
25
100

REAL

برای اعداد اعشاری معادل float در پایتون. مانند:

18.5
19.25
12.75

TEXT

برای رشته یا متن معادل str در پایتون. مانند:

Ali
Sara
Python

ذخیره تغییرات با ()commit

یک نکته بسیار مهم وجود دارد. آن هم این است که وقتی اطلاعاتی را در پایگاه داده ایجاد یا تغییر می‌دهیم، باید تغییرات را ثبت (Commit) کنیم. برای این کار از دستور commit به شکل زیر استفاده می‌کنیم:

connection.commit()

بنابراین کد کامل شده قبلی به این شکل درمی‌آید:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    CREATE TABLE students (
        id INTEGER,
        name TEXT,
        age INTEGER,
        grade REAL
    )
""")
connection.commit()
connection.close()

متد ()commit باعث می‌شود تغییرات انجام‌شده در پایگاه داده ذخیره شوند.

اگر همین کدها را برای بار دوم اجرا کنیم با خطا مواجه می‌شویم

اگر همین برنامه را یک بار اجرا کنیم، جدول students ایجاد می‌شود. اما اگر دوباره برنامه را اجرا کنیم، با خطایی شبیه این مواجه می‌شویم:

sqlite3.OperationalError:
table students already exists

دلیل آن این است که جدول students قبلا ایجاد شده و ایجاد مجدد آن باعث بروز خطا می‌شود. برای جلوگیری از این مشکل می‌توانیم هنگام ایجاد جدول از عبارت زیر استفاده کنیم که شرط موجود بودن این جدول را بررسی می‌کند:

CREATE TABLE IF NOT EXISTS
یعنی اگر وجود ندارد، آن را ایجاد کن. حالا مثال را کاملتر می‌کنیم:
import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    CREATE TABLE IF NOT EXISTS students (
        id INTEGER,
        name TEXT,
        age INTEGER,
        grade REAL
    )
""")
connection.commit()
connection.close()

در نتیجه اگر جدول از قبل وجود نداشته باشد، آن را می‌سازد. ولی اگر از قبل موجود باشد، برنامه بدون ایجاد مجدد آن ادامه پیدا می‌کند.

ساختار کلی برنامه اتصال به دیتابیس

تا اینجا الگوی اصلی کار با SQLite را یاد گرفتیم:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
# اجرای دستورات SQL
connection.commit()
connection.close()

این چهار مرحله را به خاطر بسپارید:

1. اتصال به پایگاه داده

connection = sqlite3.connect("school.db")

2. ایجاد Cursor

cursor = connection.cursor()

3. اجرای دستورات

cursor.execute(...)

4. ثبت تغییرات و بستن اتصال

connection.commit()
connection.close()

مدیریت اتصال با with

تا اینجا برای کار با پایگاه داده معمولاً اتصال را باز می‌کردیم و در پایان خودمان آن را می‌بستیم:

connection = sqlite3.connect("school.db")
# کار با پایگاه داده
connection.commit()
connection.close()

پایتون امکان استفاده از دستور with را هم فراهم می‌کند تا مدیریت اتصال ساده‌تر شود.

مثال:

import sqlite3
with sqlite3.connect("school.db") as connection:
    cursor = connection.cursor()
    cursor.execute("""
        SELECT * FROM students
    """)
    students = cursor.fetchall()
    for student in students:
        print(student)

در این روش، مدیریت اتصال به‌صورت خودکار انجام می‌شود و دیگر لازم نیست در پایان برنامه ()connection.close بنویسیم.

استفاده از with باعث می‌شود کد مربوط به مدیریت اتصال خواناتر و مطمئن‌تر باشد، به‌خصوص زمانی که برنامه بزرگ‌تر می‌شود. 

عملیات CRUD در SQLite

حالا شیوه اتصال به دیتابیس را یاد گرفتید، وقت آن رسیده که با عملیات CRUD یعنی درج و حذف اطلاعات به داخل دیتابیس و همچنین خواندن و اصلاح اطلاعات آشنا شوید. به دلیل طولانی شدن درس، این بخش را در صفحه دیگری آورده‌ایم.

گام بعدی : عملیات CRUD در SQLite

برای شرکت در آزمون آماده‌اید؟

با ورود به پنل کاربری می‌توانید جهت ثبت نام در آزمون‌ها و دسترسی به منابع آموزشی اقدام نمایید. کارشناسان ما در اسرع وقت با شما تماس می‌گیرند.

شروع کار با Django

شروع کار با Django در دوره آموزش جامع پایتون با مفاهیمی مانند متغیرها، شرط‌ها، حلقه‌ها، توابع، کلاس‌ها، فایل‌ها و کار

ادامه مطلب »

عملیات CRUD در SQLite

عملیات CRUD درSQLite در بخش قبل با مفهوم پایگاه داده، SQLite و نحوه اتصال پایتون به پایگاه داده آشنا شدیم.

ادامه مطلب »

توابع در پایتون

توابع در پایتون اگر هنگام برنامه‌نویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و

ادامه مطلب »

مجموعه در پایتون

مجموعه (Set) در پایتون به زبان ساده، Set مجموعه‌ای از عناصر منحصربه‌فرد (Unique) است که ترتیب مشخصی ندارد و اجازه

ادامه مطلب »

تاپل در پایتون

تاپل (Tuple) در پایتون بعد از آشنایی با لیست (List)، نوبت به یکی دیگر از ساختارهای داده در پایتون یعنی

ادامه مطلب »

لیست در پایتون

لیست (List) در پایتون پرکاربردترین ساختار داده​ تا اینجا یاد گرفتید که هر متغیر فقط یک مقدار را در خود

ادامه مطلب »

آموزش نصب پایتون

آموزش نصب پایتون و ابزارهای موردنیاز (راهنمای کامل برای ویندوز) اگر تصمیم گرفته‌اید برنامه‌نویسی را یاد بگیرید، احتمالاً نام زبان

ادامه مطلب »