0%
در حال بارگذاری...

جستجو در سایت

درس ۸ مقدماتی: پایگاه داده مقدماتی با SQLite در پایتون

پایتون | Python مقدماتی

تا حالا شده بخوای دیتاهای برنامه‌ت رو جایی ذخیره کنی که حتی بعد از خاموش شدن برنامه هم بمونه؟ 🗄️ دیتابیس (Database) مثل یه کمد بایگانی مرتب برای داده‌هاته! تو این درس، با پایگاه داده مقدماتی و ماژول sqlite3 در پایتون آشنا می‌شی تا بتونی داده‌ها رو ذخیره، بازیابی و مدیریت کنی. برای مثال، می‌تونی اطلاعات دانش‌آموزان یا لیست خرید رو توی یه پایگاه داده ذخیره کنی. بنابراین، اگر درس‌های ۱ تا ۷ (متغیرها، شرط‌ها، حلقه‌ها، داده‌ساختارها، توابع، فایل‌ها، ماژول‌ها و شیءگرایی) رو یاد گرفتی، حالا آماده‌ای که داده‌هات رو حرفه‌ای مدیریت کنی! 🚀 با مثال‌های واقعی، جداول مقایسه، ۱۲ تمرین و یه پروژه جذاب، این درس بهت کمک می‌کنه داده‌ها رو پایدار نگه داری. بریم شروع کنیم! 🎉

پایگاه داده چیه و چرا مهمه؟ 🗃️

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

  • پایداری: داده‌های شما بعد از بستن برنامه از بین نمی‌رن.
  • جست‌وجو: سریع داده‌ها رو پیدا می‌کنی.
  • نظم: داده‌ها مرتب و ساختارمند ذخیره می‌شن.

به همین دلیل، پایگاه داده برای برنامه‌های واقعی ضروریه. ما از sqlite3 استفاده می‌کنیم چون سبک، ساده و بدون نیاز به نصب جداگونه‌ست. بیایم شروع کنیم:

import sqlite3
conn = sqlite3.connect("mydb.db")
print("پایگاه داده ساخته شد!")
conn.close()

بنابراین، sqlite3.connect یه فایل پایگاه داده (مثل mydb.db) می‌سازه یا بهش وصل می‌شه.

ساخت جدول و اضافه کردن دیتا📋

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

import sqlite3
conn = sqlite3.connect("school.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY, name TEXT, grade REAL)")
conn.commit()
conn.close()

به علاوه، برای اضافه کردن Data:

conn = sqlite3.connect("school.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO students (name, grade) VALUES (?, ?)", ("علی", 15.5))
conn.commit()
conn.close()

💡 نکته: ? برای جلوگیری از تزریق SQL (حمله امنیتی) استفاده می‌شه و commit تغییرات رو ذخیره می‌کنه.

خواندن و به‌روزرسانی داده‌ها 🔍

برای بازیابی داده‌ها از SELECT استفاده می‌کنیم. برای مثال:

conn = sqlite3.connect("school.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
for row in rows:
    print(f"ID: {row[0]}, نام: {row[1]}, نمره: {row[2]}")
conn.close()

علاوه بر این، برای به‌روزرسانی:

conn = sqlite3.connect("school.db")
cursor = conn.cursor()
cursor.execute("UPDATE students SET grade = ? WHERE name = ?", (18.0, "علی"))
conn.commit()
conn.close()

💡 نکته: همیشه بعد از تغییر (INSERT، UPDATE، DELETE) از commit استفاده کن.

حذف داده‌ها و مدیریت خطاها 🗑️

برای حذف داده از DELETE استفاده می‌شه. برای مثال:

conn = sqlite3.connect("school.db")
cursor = conn.cursor()
cursor.execute("DELETE FROM students WHERE grade < ?", (10.0,))
conn.commit()
conn.close()

به علاوه، برای مدیریت خطاها (درس ۵):

try:
    conn = sqlite3.connect("school.db")
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM nonexistent")
except sqlite3.OperationalError:
    print("جدول وجود نداره!")
finally:
    conn.close()

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

ترکیب با درس‌های قبلی: دیتابیس و OOP 🛠️

برای مثال، می‌تونی پایگاه داده رو با کلاس‌ها (درس ۷) و توابع (درس ۴) ترکیب کنی:

class StudentDB:
    def __init__(self, db_name):
        self.conn = sqlite3.connect(db_name)
        self.cursor = self.conn.cursor()
        self.cursor.execute("CREATE TABLE IF NOT EXISTS students (name TEXT, grade REAL)")

    def add_student(self, name, grade):
        self.cursor.execute("INSERT INTO students (name, grade) VALUES (?, ?)", (name, grade))
        self.conn.commit()

    def __del__(self):
        self.conn.close()

db = StudentDB("school.db")
db.add_student("مریم", 17.5)

به همین دلیل، این ترکیب کدت رو حرفه‌ای‌تر می‌کنه.

مثال‌های عملی: دنیای واقعی 💡

برای مثال، بیایم چند برنامه کاربردی بسازیم:

۱. مدیریت لیست خرید:

import sqlite3
conn = sqlite3.connect("shop.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY, item TEXT)")
cursor.execute("INSERT INTO items (item) VALUES (?)", ("شیر",))
conn.commit()
cursor.execute("SELECT * FROM items")
print(cursor.fetchall())
conn.close()

۲. ثبت نمرات:

class GradeDB:
    def __init__(self):
        self.conn = sqlite3.connect("grades.db")
        self.cursor = self.conn.cursor()
        self.cursor.execute("CREATE TABLE IF NOT EXISTS grades (student TEXT, score REAL)")

    def add_grade(self, student, score):
        self.cursor.execute("INSERT INTO grades (student, score) VALUES (?, ?)", (student, score))
        self.conn.commit()

db = GradeDB()
db.add_grade("رضا", 19.0)

۳. جست‌وجوی دانش‌آموز:

conn = sqlite3.connect("school.db")
cursor = conn.cursor()
name = input("نام دانش‌آموز: ")
cursor.execute("SELECT * FROM students WHERE name = ?", (name,))
result = cursor.fetchone()
if result:
    print(f"نام: {result[1]}, نمره: {result[2]}")
else:
    print("دانش‌آموز پیدا نشد!")
conn.close()

به همین دلیل، این مثال‌ها درس‌های قبلی رو با Database ترکیب می‌کنن. کدها رو توی lesson8_examples.py ذخیره کن.

خطاهای رایج و راه‌حل‌ها ⚠️

به طور کلی، این خطاها تو کار با دیتابیس شایعن:

خطا علت راه‌حل
OperationalError اشتباه در کوئری SQL املا و ساختار کوئری رو چک کن
DatabaseError مشکل در اتصال یا داده اتصال و ورودی‌ها رو بررسی کن
ProgrammingError جدول یا ستون ناموجود وجود جدول و ستون‌ها رو چک کن

برای مثال:

try:
    conn = sqlite3.connect("school.db")
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM nonexistent")
except sqlite3.OperationalError:
    print("جدول وجود نداره!")
finally:
    conn.close()

تمرین‌ها: مهارتت رو تست کن! 📝

برای تسلط، این ۱۲ تمرین رو حل کن:

  1. جدولی برای کتاب‌ها بساز و یه کتاب اضافه کن.
  2. کلاسی برای مدیریت دانش‌آموزان بساز که نمره اضافه کنه.
  3. برنامه‌ای که تمام داده‌های جدول رو نمایش بده.
  4. برنامه‌ای که نمرات زیر ۱۰ رو حذف کنه.
  5. کلاسی برای لیست خرید بساز که اقلام رو ذخیره کنه.
  6. برنامه‌ای که میانگین نمرات یه جدول رو حساب کنه.
  7. تابعی که داده‌ها رو بر اساس نام مرتب کنه.
  8. کلاسی برای ثبت وظایف بساز که توی Database ذخیره کنه.
  9. برنامه‌ای که تعداد ردیف‌های جدول رو بشماره.
  10. تابعی که یه دانش‌آموز رو با نام جست‌وجو کنه.
  11. برنامه‌ای که نمره دانش‌آموز رو به‌روزرسانی کنه.
  12. کلاسی برای مدیریت حساب بانکی بساز که تراکنش‌ها رو ذخیره کنه.

💡 نکته: هر تمرین رو توی فایل جدا (ex1.py، ex2.py) ذخیره کن.

پروژه کوچک: سیستم مدیریت دانش‌آموزان 🏫

برای مثال، بیایم یه سیستم مدیریت دانش‌آموزان بسازیم:

  1. کلاسی برای مدیریت دانش‌آموزان.
  2. امکان اضافه، نمایش و جست‌وجوی دانش‌آموز.
  3. ذخیره در Database.
import sqlite3

class SchoolManager:
    def __init__(self, db_name):
        self.conn = sqlite3.connect(db_name)
        self.cursor = self.conn.cursor()
        self.cursor.execute("CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY, name TEXT, grade REAL)")

    def add_student(self, name, grade):
        try:
            self.cursor.execute("INSERT INTO students (name, grade) VALUES (?, ?)", (name, grade))
            self.conn.commit()
            print(f"{name} اضافه شد!")
        except sqlite3.Error:
            print("خطا در افزودن!")

    def show_students(self):
        self.cursor.execute("SELECT * FROM students")
        rows = self.cursor.fetchall()
        if not rows:
            print("هیچ دانش‌آموزی نیست!")
        else:
            for row in rows:
                print(f"ID: {row[0]}, نام: {row[1]}, نمره: {row[2]}")

    def __del__(self):
        self.conn.close()

school = SchoolManager("school.db")
while True:
    print("\n=== مدیریت دانش‌آموزان ===")
    action = input("اضافه (a)، نمایش (s)، خروج (q): ")
    if action == "q":
        break
    elif action == "a":
        name = input("نام: ")
        grade = float(input("نمره: "))
        school.add_student(name, grade)
    elif action == "s":
        school.show_students()
print("خداحافظ!")

💡 تست کن: دانش‌آموز اضافه کن، لیست رو نمایش بده و فایل school.db رو چک کن.

سؤالات متداول (FAQ) ❓

به طور کلی، این سؤالات برای مبتدی‌ها رایجه:

  • چرا از SQLite استفاده کنیم؟ چون ساده‌ست و نیاز به نصب جدا نداره.
  • commit چیه؟ تغییرات رو توی پایگاه داده ذخیره می‌کنه.
  • چطور خطای SQL رو رفع کنم؟ کوئری و نام جدول‌ها رو چک کن.
  • فایل .db کجاست؟ توی پوشه پروژه‌ت ذخیره می‌شه.

جمع‌بندی و قدم بعدی ⏭️

تبریک! 🚀 تو این درس دیتابیس با SQLite رو یاد گرفتی و با بیش از ۱۲ مثال و یه پروژه، حسابی مسلط شدی. بنابراین، حالا می‌تونی داده‌ها رو به‌صورت پایدار ذخیره و مدیریت کنی. علاوه بر این، درس بعدی (کار با APIها) بهت یاد می‌ده چطور از داده‌های آنلاین استفاده کنی. در نهایت، تمرین‌ها رو توی PythonLessons ذخیره کن و اگه دوست داشتی، توی GitHub آپلود کن تا پیشرفتت رو نشون بدی! 😎

ارسال نظر جدید

گزارش دیدگاه