عملیات CRUD درSQLite

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

 

فهرست مطالب

افزودن اطلاعات به پایگاه داده با INSERT

حالا که پایگاه داده و جدول students را ایجاد کرده‌ایم، وقت آن است که اطلاعات را داخل جدول ذخیره کنیم. برای افزودن رکورد جدید به جدول در SQL از دستور INSERT INTO استفاده می‌کنیم. ساختار کلی آن به این شکل است:

INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);

برای مثال، اگر بخواهیم یک دانش‌آموز به جدول students اضافه کنیم:

INSERT INTO students (id, name, age, grade)
VALUES (1, 'Ali', 16, 18.5);

اما چون در پایتون با SQLite کار می‌کنیم، این دستور را با execute() اجرا می‌کنیم.

ایجاد اولین رکورد

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    INSERT INTO students (id, name, age, grade)
    VALUES (1, 'Ali', 16, 18.5)
""")
connection.commit()
connection.close()

بعد از اجرای برنامه، یک رکورد جدید در جدول students ذخیره می‌شود. جدول ما اکنون چیزی شبیه این خواهد بود:

idnameagegrade
1Ali1618.5

اضافه کردن چند دانش‌آموز

می‌توانیم به ازاء هر رکورد یک بار از دستور INSERT استفاده کنیم:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    INSERT INTO students (id, name, age, grade)
    VALUES (1, 'Ali', 16, 18.5)
""")
cursor.execute("""
    INSERT INTO students (id, name, age, grade)
    VALUES (2, 'Sara', 17, 19.2)
""")
cursor.execute("""
    INSERT INTO students (id, name, age, grade)
    VALUES (3, 'Reza', 16, 17.8)
""")
connection.commit()
connection.close()

حالا جدول شامل سه رکورد خواهد بود:

idnameagegrade
1Ali1618.5
2Sara1719.2
3Reza1617.8

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

دریافت اطلاعات از کاربر

فرض کنید می‌خواهیم نام، سن و معدل دانش‌آموز را از کاربر دریافت کنیم:

import sqlite3
name = input("نام دانش‌آموز: ")
age = int(input("سن: "))
grade = float(input("معدل: "))
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    INSERT INTO students (name, age, grade)
    VALUES (?, ?, ?)
""", (name, age, grade))
connection.commit()
connection.close()

در حالت علامت‌های ? جای مقادیر واقعی را مشخص می‌کنند:

VALUES (?, ?, ?)

و مقادیر موردنظر را به‌صورت یک تاپل به ()execute می‌دهیم:

(name, age, grade)

پایتون مقدارها را به‌ترتیب در جای ? قرار می‌دهد. مثلاً اگر کاربر وارد کند:

نام دانش‌آموز: Mina
سن: 17
معدل: 19.5

دستور اجراشده عملاً اطلاعاتی مشابه این را ذخیره خواهد کرد:

Mina | 17 | 19.5

نکته مهم

استفاده از پارامترها روش درست و امن برای قرار دادن داده‌های کاربر در دستورات SQL است و از ساختن مستقیم رشته‌های SQL با ورودی کاربر جلوگیری می‌کند. بنابراین بهتر است هیچ‌وقت چنین کاری نکنیم:

cursor.execute(
    f"INSERT INTO students (name, age) VALUES ('{name}', {age})"
)

و به‌جای آن از پارامترها استفاده کنیم:

cursor.execute(
    "INSERT INTO students (name, age) VALUES (?, ?)",
    (name, age)
)

یک نکته درباره ستون id

در جدول فعلی، id را خودمان وارد می‌کنیم:

1
2
3

اما در برنامه‌های واقعی معمولاً بهتر است شماره شناسه هر رکورد به‌صورت خودکار ایجاد شود. برای این کار بعداً هنگام طراحی جدول از ویژگی‌هایی مانند:

INTEGER PRIMARY KEY AUTOINCREMENT

استفاده خواهیم کرد. در نتیجه دیگر لازم نیست هنگام ثبت دانش‌آموز، id را خودمان وارد کنیم. فعلاً برای اینکه مفهوم INSERT را ساده یاد بگیریم، به همین صورت که گفتیم، عمل می‌کنیم.

خواندن اطلاعات از پایگاه داده با SELECT

تا اینجا یاد گرفتیم چگونه اطلاعات را در پایگاه داده ذخیره کنیم. اما ذخیره کردن اطلاعات به‌تنهایی کافی نیست؛ برنامه باید بتواند اطلاعات ذخیره‌شده را بخواند و نمایش دهد. برای دریافت اطلاعات از یک جدول در SQL از دستور SELECT استفاده می‌کنیم. ساده‌ترین شکل آن چنین است:

SELECT * FROM students;

علامت * یعنی همه ستون‌ها را انتخاب کن. برای اجرای این دستور در پایتون:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
for row in rows:
    print(row)
connection.close()

اگر جدول ما شامل این اطلاعات باشد:

idnameagegrade
1Ali1618.5
2Sara1719.2
3Reza1617.8

خروجی برنامه تقریباً به این شکل خواهد بود:

(1, 'Ali', 16, 18.5)
(2, 'Sara', 17, 19.2)
(3, 'Reza', 16, 17.8)

متد fetchall()

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

rows = cursor.fetchall()

متد fetchall() تمام رکوردهایی را که توسط دستور SELECT پیدا شده‌اند، دریافت می‌کند. نتیجه معمولاً به شکل از تاپل‌ها برمی‌گردد. برای مثال:

[
    (1, 'Ali', 16, 18.5),
    (2, 'Sara', 17, 19.2),
    (3, 'Reza', 16, 17.8)
]

به همین دلیل می‌توانیم با یک حلقه for روی آنها حرکت کنیم:

for row in rows:
    print(row)
 

نمایش اطلاعات به شکل خواناتر

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

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
for row in rows:
    print("شناسه:", row[0])
    print("نام:", row[1])
    print("سن:", row[2])
    print("معدل:", row[3])
    print("----------------")
connection.close()

خروجی:

شناسه: 1
نام: Ali
سن: 16
معدل: 18.5
----------------
شناسه: 2
نام: Sara
سن: 17
معدل: 19.2
----------------
شناسه: 3
نام: Reza
سن: 16
معدل: 17.8
----------------

در حالت row[0شناسه را نشان می‌دهد. row[1نام را نشان می‌دهد.  row[2سن را نشان می‌دهد. و row[3] معدل را نشان می‌دهد.

انتخاب ستون‌های خاص

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

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("SELECT name, grade FROM students")
rows = cursor.fetchall()
for row in rows:
    print("نام:", row[0], "| معدل:", row[1])
connection.close()

خروجی:

نام: Ali | معدل: 18.5
نام: Sara | معدل: 19.2
نام: Reza | معدل: 17.8

بنابراین:

SELECT * FROM students

یعنی همه ستون‌ها را دریافت کن. اما:

SELECT name, grade FROM students

یعنی فقط ستون‌های name و grade را دریافت کن.

دریافت فقط یک رکورد با ()fetchone

گاهی نمی‌خواهیم تمام رکوردها را دریافت کنیم و فقط به اولین رکورد نیاز داریم. در این حالت می‌توانیم از ()fetchone استفاده کنیم:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("SELECT * FROM students")
row = cursor.fetchone()
print(row)
connection.close()

اگر جدول شامل سه دانش‌آموز باشد، خروجی فقط اولین رکورد خواهد بود:

(1, 'Ali', 16, 18.5)

جست‌وجو در پایگاه داده با WHERE

تا اینجا با SELECT یاد گرفتیم که اطلاعات جدول را دریافت کنیم. اما در برنامه‌های واقعی معمولاً نمی‌خواهیم همه اطلاعات را نمایش دهیم. مثلاً ممکن است بخواهیم فقط دانش‌آموزان بالای 18 سال را پیدا کنیم. یا اینکه فقط دانش‌آموزی با نام مشخص را پیدا کنیم. یا حتی فقط دانش‌آموزانی با معدل بالاتر از 18 را نمایش دهیم. برای این کار از دستور WHERE استفاده می‌کنیم.

ساختار کلی:

SELECT column1, column2
FROM table_name
WHERE condition;

یک مثال ساده

فرض کنید می‌خواهیم فقط دانش‌آموزانی را پیدا کنیم که معدل آنها بیشتر از 18 است:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    SELECT * FROM students
    WHERE grade > 18
""")
students = cursor.fetchall()
for student in students:
    print(student)
connection.close()

اگر اطلاعات جدول به این باشد:

idnameagegrade
1Ali1618.5
2Sara1719.2
3Reza1617.8
4Mina1815.5

خروجی چنین می‌شود:

(1, 'Ali', 16, 18.5)
(2, 'Sara', 17, 19.2)

زیرا فقط معدل‌های بزرگ‌تر از 18 انتخاب شده‌اند.

استفاده از پارامتر در WHERE

اگر مقدار موردنظر را از کاربر دریافت کنیم، باید مانند INSERT از ? استفاده کنیم. مثلاً کاربر یک معدل وارد می‌کند و برنامه دانش‌آموزانی را نشان می‌دهد که معدلشان بیشتر از آن مقدار است:

import sqlite3
grade = float(input("معدل موردنظر را وارد کنید: "))
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    SELECT * FROM students
    WHERE grade > ?
""", (grade,))
students = cursor.fetchall()
for student in students:
    print(student)
connection.close()

اگر کاربر وارد کند:

معدل موردنظر را وارد کنید: 18

فقط دانش‌آموزانی نمایش داده می‌شوند که معدل آنها بیشتر از 18 است.

نکته مهم

حتی وقتی فقط یک پارامتر داریم، باید آن را به شکل یک تاپل به ()execute بدهیم:

(grade,)

ویرگول بعد از grade مهم است. چون در پایتون همین ویرگول مشخص می‌کند که این یک تاپل تک‌عضوی است.

جست‌وجو بر اساس نام

فرض کنید می‌خواهیم دانش‌آموزی با نام مشخص را پیدا کنیم:

import sqlite3
name = input("نام دانش‌آموز را وارد کنید: ")
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    SELECT * FROM students
    WHERE name = ?
""", (name,))
students = cursor.fetchall()
for student in students:
    print(student)
connection.close()

اگر کاربر وارد کند:

نام دانش‌آموز را وارد کنید: Sara

برنامه رکورد مربوط به Sara را پیدا می‌کند.

استفاده از عملگرهای مقایسه‌ای

در WHERE می‌توانیم از عملگرهای مقایسه‌ای استفاده کنیم. جهت یادآوری عملگرهای مقایسه‌ای را در جدول زیر آورده‌ایم:

عملگرمعنی
=مساوی
!=نامساوی
>بزرگ‌تر
<کوچک‌تر
>=بزرگ‌تر یا مساوی
<=کوچک‌تر یا مساوی

مثلاً:

WHERE age >= 17

دانش‌آموزانی را پیدا می‌کند که حداقل 17 سال دارند.

یا:

WHERE grade <= 15
 

دانش‌آموزانی را پیدا می‌کند که معدل آنها حداکثر 15 است.

استفاده از عملگرهای منطقی

استفاده از AND

گاهی می‌خواهیم چند شرط را هم‌زمان بررسی کنیم. مثلاً دانش‌آموزانی را پیدا کنیم که سن آنها حداقل 17 سال باشد. و در عین حال معدل آنها بیشتر از 18 باشد. برای این کار از AND استفاده می‌کنیم:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    SELECT * FROM students
    WHERE age >= ? AND grade > ?
""", (17, 18))
students = cursor.fetchall()
for student in students:
    print(student)
connection.close()

در اینجا هر دو شرط باید همزمان برقرار باشند. 

استفاده از OR

اگر بخواهیم برقرار بودن حداقل یکی از دو شرط کافی باشد، از OR استفاده می‌کنیم. مثلاً:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    SELECT * FROM students
    WHERE age >= ? OR grade > ?
""", (18, 19))
students = cursor.fetchall()
for student in students:
    print(student)
connection.close()

در این حالت دانش‌آموز در صورتی نمایش داده می‌شود که:

سن او حداقل 18 باشد یا معدلش بیشتر از 19 باشد.

یک مثال کاربردی‌تر

برنامه‌ای بنویسیم که از کاربر یک حداقل معدل بگیرد و دانش‌آموزان واجد شرایط را نمایش دهد:

import sqlite3
min_grade = float(input("حداقل معدل را وارد کنید: "))
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    SELECT name, age, grade
    FROM students
    WHERE grade >= ?
""", (min_grade,))
students = cursor.fetchall()
if students:
    print("\nدانش‌آموزان واجد شرایط:")
    for student in students:
        print(
            f"نام: {student[0]} | "
            f"سن: {student[1]} | "
            f"معدل: {student[2]}"
        )
else:
    print("دانش‌آموزی پیدا نشد.")
connection.close()

ویرایش اطلاعات با UPDATE

تا اینجا یاد گرفتیم چگونه اطلاعات را اضافه و جست‌وجو کنیم. اما در یک برنامه واقعی ممکن است اطلاعات یک رکورد تغییر کند. برای مثال معدل دانش‌آموز تغییر کند. یا اینکه شماره تماس کاربر عوض شود. سن یک فرد به‌روزرسانی شود. و یا نام یک محصول تغییر کند. برای تغییر اطلاعات موجود در پایگاه داده از دستور UPDATE استفاده می‌کنیم. 

ساختار کلی:

UPDATE table_name
SET column = value
WHERE condition;

یک مثال ساده

فرض کنید معدل Ali از 18.5 به 19 تغییر کرده است:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    UPDATE students
    SET grade = ?
    WHERE name = ?
""", (19, "Ali"))
connection.commit()
connection.close()

در این حالت این خط:

SET grade = ?

مشخص می‌کند که مقدار ستون grade باید تغییر کند. و این خط :

WHERE name = ?

مشخص می‌کند که این تغییر برای کدام دانش‌آموز انجام شود.

حالا به این قسمت دقت کنید:

UPDATE students
SET grade = 19
WHERE name = 'Ali';

یعنی فقط معدل دانش‌آموزی که نامش Ali است تغییر کند. اما اگر WHERE را حذف کنیم، معدل تمام دانش‌آموزان به 19 تغییر خواهد کرد! 

دریافت اطلاعات جدید از کاربر

می‌توانیم مقدار جدید را از کاربر دریافت کنیم:

import sqlite3
name = input("نام دانش‌آموز: ")
new_grade = float(input("معدل جدید: "))
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    UPDATE students
    SET grade = ?
    WHERE name = ?
""", (new_grade, name))
connection.commit()
connection.close()
print("اطلاعات با موفقیت به‌روزرسانی شد.")

مثلاً اگر کاربر وارد کند:

نام دانش‌آموز: Sara
معدل جدید: 19.8

معدل Sara در پایگاه داده به 19.8 تغییر می‌کند.

 

تغییر چند ستون به‌صورت هم‌زمان

با UPDATE می‌توانیم چند ستون را هم‌زمان تغییر دهیم. مثلاً نام و سن یک دانش‌آموز را تغییر دهیم:

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    UPDATE students
    SET name = ?, age = ?
    WHERE id = ?
""", ("Mohammad", 18, 2))
connection.commit()
connection.close()

حذف اطلاعات از پایگاه داده با DELETE

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

ساختار کلی:

DELETE FROM table_name
WHERE condition;

برای مثال، اگر بخواهیم دانش‌آموزی با شناسه 3 را حذف کنیم:

DELETE FROM students
WHERE id = 3;

در پایتون، این دستور را با execute() اجرا می‌کنیم.

حذف یک رکورد

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    DELETE FROM students
    WHERE id = ?
""", (3,))
connection.commit()
connection.close()

در این مثال، رکوردی که مقدار id آن برابر با 3 است، از جدول حذف می‌شود.

نکته مهم

اگر WHERE را حذف کنیم، تمام رکوردهای جدول حذف می‌شوند. بنابراین هنگام استفاده از DELETE باید با دقت شرط موردنظر را مشخص کنیم.

دریافت شناسه از کاربر

در یک برنامه واقعی می‌توانیم شناسه دانش‌آموزی که باید حذف شود را از کاربر دریافت کنیم:

import sqlite3
student_id = int(input("شناسه دانش‌آموز را وارد کنید: "))
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    DELETE FROM students
    WHERE id = ?
""", (student_id,))
connection.commit()
connection.close()
print("عملیات حذف انجام شد.")

می‌توانیم به‌جای شناسه، از نام نیز استفاده کنیم. اما حذف بر اساس id معمولاً روش مطمئن‌تری است. زیرا ممکن است چند دانش‌آموز نام یکسان داشته باشند. 

مرتب‌سازی و محدود کردن نتایج

گاهی اطلاعات موجود در پایگاه داده را می‌خواهیم بر اساس یک ستون خاص مرتب کنیم. برای مثال، می‌توانیم دانش‌آموزان را بر اساس معدل از کمترین به بیشترین مرتب کنیم. برای مرتب‌سازی در SQL از دستور ORDER BY استفاده می‌کنیم.

مرتب‌سازی صعودی

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    SELECT * FROM students
    ORDER BY grade ASC
""")
students = cursor.fetchall()
for student in students:
    print(student)
connection.close()

در اینجا:

ORDER BY grade ASC

یعنی اطلاعات را بر اساس ستون grade به‌صورت صعودی مرتب کن. ASC مخفف Ascending است.

مثلاً:

15.5
17.8
18.5
19.2

مرتب‌سازی نزولی

اما اگر بخواهیم معدل‌ها از بیشترین به کمترین مرتب شوند، از DESC استفاده می‌کنیم:

cursor.execute("""
    SELECT * FROM students
    ORDER BY grade DESC
""")

DESC مخفف Descending است. نتیجه:

19.2
18.5
17.8
15.5
 

استفاده از LIMIT

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

import sqlite3
connection = sqlite3.connect("school.db")
cursor = connection.cursor()
cursor.execute("""
    SELECT * FROM students
    ORDER BY grade DESC
    LIMIT 3
""")
students = cursor.fetchall()
for student in students:
    print(student)
connection.close()

در اینجا:

ORDER BY grade DESC

دانش‌آموزان را از بیشترین معدل به کمترین مرتب می‌کند.

و این خط:

LIMIT 3

فقط سه رکورد اول را برمی‌گرداند. پس این دستور:

SELECT * FROM students
ORDER BY grade DESC
LIMIT 3;

یعنی همه دانش‌آموزان را بر اساس معدل از بیشترین به کمترین مرتب کن و فقط سه نفر اول را نمایش بده.

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

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

				
					import sqlite3


# اتصال به پایگاه داده
connection = sqlite3.connect("school.db")
cursor = connection.cursor()


# ایجاد جدول
cursor.execute("""
    CREATE TABLE IF NOT EXISTS students (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        age INTEGER,
        grade REAL
    )
""")

connection.commit()


while True:

    print("\n===== سیستم مدیریت دانش‌آموزان =====")
    print("1. افزودن دانش‌آموز")
    print("2. نمایش همه دانش‌آموزان")
    print("3. جست‌وجوی دانش‌آموز")
    print("4. ویرایش معدل")
    print("5. حذف دانش‌آموز")
    print("6. خروج")

    choice = input("انتخاب شما: ")

    # افزودن دانش‌آموز
    if choice == "1":

        name = input("نام دانش‌آموز: ")
        age = int(input("سن: "))
        grade = float(input("معدل: "))

        cursor.execute("""
            INSERT INTO students (name, age, grade)
            VALUES (?, ?, ?)
        """, (name, age, grade))

        connection.commit()

        print("دانش‌آموز با موفقیت ثبت شد.")


    # نمایش همه دانش‌آموزان
    elif choice == "2":

        cursor.execute("""
            SELECT * FROM students
            ORDER BY id
        """)

        students = cursor.fetchall()

        if students:
            print("\n--- لیست دانش‌آموزان ---")

            for student in students:
                print(
                    f"شناسه: {student[0]} | "
                    f"نام: {student[1]} | "
                    f"سن: {student[2]} | "
                    f"معدل: {student[3]}"
                )
        else:
            print("هیچ دانش‌آموزی ثبت نشده است.")


    # جست‌وجوی دانش‌آموز
    elif choice == "3":

        name = input("نام دانش‌آموز را وارد کنید: ")

        cursor.execute("""
            SELECT * FROM students
            WHERE name = ?
        """, (name,))

        students = cursor.fetchall()

        if students:
            for student in students:
                print(
                    f"شناسه: {student[0]} | "
                    f"نام: {student[1]} | "
                    f"سن: {student[2]} | "
                    f"معدل: {student[3]}"
                )
        else:
            print("دانش‌آموز پیدا نشد.")


    # ویرایش معدل
    elif choice == "4":

        student_id = int(input("شناسه دانش‌آموز: "))
        new_grade = float(input("معدل جدید: "))

        cursor.execute("""
            UPDATE students
            SET grade = ?
            WHERE id = ?
        """, (new_grade, student_id))

        connection.commit()

        if cursor.rowcount > 0:
            print("معدل با موفقیت تغییر کرد.")
        else:
            print("دانش‌آموز پیدا نشد.")


    # حذف دانش‌آموز
    elif choice == "5":

        student_id = int(input("شناسه دانش‌آموز: "))

        cursor.execute("""
            DELETE FROM students
            WHERE id = ?
        """, (student_id,))

        connection.commit()

        if cursor.rowcount > 0:
            print("دانش‌آموز با موفقیت حذف شد.")
        else:
            print("دانش‌آموز پیدا نشد.")


    # خروج
    elif choice == "6":

        print("برنامه به پایان رسید.")
        break

    else:
        print("گزینه نامعتبر است.")


# بستن اتصال
connection.close()
				
			

📝 تمرین ۱ — دفترچه مخاطبین

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

📝 تمرین ۲ — مدیریت محصولات فروشگاه

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

📝 تمرین ۳ — لیست فیلم‌ها

برنامه‌ای برای مدیریت فیلم‌های موردعلاقه طراحی کنید. اطلاعات هر فیلم شامل:
نام فیلم
ژانر
امتیاز
باشد. امکان افزودن، نمایش، جست‌وجو و حذف فیلم‌ها را ایجاد کنید. سپس فقط فیلم‌هایی را نمایش دهید که امتیاز آنها بیشتر از 8 است.

📝 تمرین ۴ — مدیریت کتابخانه

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

📝 تمرین ۵ — لیست کارهای روزانه

برنامه‌ای برای مدیریت کارهای روزانه بسازید. هر کار شامل:
عنوان کار
وضعیت انجام‌شدن (انجام شده یا انجام نشده)
باشد. برنامه باید بتواند کار جدید اضافه کند، تمام کارها را نمایش دهد، وضعیت یک کار را تغییر دهد و یک کار را حذف کند. سپس فقط کارهای انجام‌نشده را نمایش دهید.

📝 تمرین ۶ — مدیریت حساب بانکی

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

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

با یادگیری مباحث این دوره، شما با مهم‌ترین مفاهیم و ابزارهای موردنیاز برای شروع برنامه‌نویسی با پایتون آشنا شدید. اگر می‌خواهید مسیر خود را در توسعه وب ادامه دهید، دوره آموزش Django می‌تواند انتخاب مناسبی باشد و اگر به هوش مصنوعی و تحلیل داده علاقه‌مند هستید، پیشنهاد می‌کنیم یادگیری Machine Learning را آغاز کنید.

ورود به آموزش فریمورک جنگو ورود به آموزش ماشین لرنینگ

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

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

شروع کار با Django

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

ادامه مطلب »

عملیات CRUD در SQLite

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

ادامه مطلب »

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

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

ادامه مطلب »

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

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

ادامه مطلب »

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

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

ادامه مطلب »

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

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

ادامه مطلب »

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

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

ادامه مطلب »