SQlite
আমরা SQL শিখেছি। কিন্তু ব্যবহার করে দেখিনি, এসকিউএল ব্যবহার করে দেখতে হলে আমাদের একটি ডেটাবেস ম্যানেজমেন্ট সিস্টেমের প্রয়োজন পরবে। আগেই বলেছি বেশ কিছু জনপ্রিয় ডেটাবেস ম্যানেজমেন্ট সিস্টেম রয়েছে, যেমন - MySQL, MongoDB, Oracle ইত্যাদি। তবে আমরা এতো বড় মাপের কোনো ডেটাবেস ম্যানেজমেন্ট সিস্টেম ব্যবহার করবো না। আমরা SQLite নামের একটি ডেটাবেস ম্যানেজমেন্ট সিস্টেম ব্যবহার করব, যেটি কিনা পাইথনের মধ্যে আগে থেকেই আছে। তাই নতুন করে আর কোনো কিছু ডাউনলোড করতে হবে না। তবে এর ডাউনসাইডও আছে, সেটি হলো এটি ছোট, তাই একে কোনো বড় প্রজেক্টে ব্যবহার করা যাবে না। শেখার খাতিরে আমরা SQLite শিখছি তবে, ছোট প্রজেক্ট গুলোতে ব্যবহার করব। কিন্তু বড় প্রজেক্টে অবশ্যই MySQL এর মতো বড় ডেটাবেস গুলো ব্যবহার করব।
🗂️ SQLite3 Setup in Python
✅ Python-এ SQLite3 ব্যবহার করতে চাইলে আলাদা করে কিছু ইনস্টল করতে হয় না!
Python-এর সঙ্গে sqlite3
মডিউলটা built-in হিসেবে আগে থেকেই থাকে।
▶️ ব্যবহার করার নিয়ম:
import sqlite3
এই এক লাইনেই sqlite3
মডিউল ইমপোর্ট হয়ে যাবে। এরপর তুমি ডাটাবেইজ তৈরি করা, টেবিল বানানো, ডেটা ইনসার্ট করা সব কিছুই করতে পারবে।
🔍
SQLite vs sqlite3 (What's the difference?)
ব্যাপার | SQLite | sqlite3 |
এটা কী? | একটা ডেটাবেইজ ইঞ্জিন | Python-এ SQLite ব্যবহার করার লাইব্রেরি/মডিউল |
কে তৈরি করেছে? | D. Richard Hipp | Python টিম |
আলাদা করে ইনস্টল করতে হয়? | হ্যাঁ, যদি তুমি Python ছাড়া অন্য জায়গায় ব্যবহার করো | না, Python-এ এটা built-in |
ব্যবহার হয় কোথায়? | Android অ্যাপ, ছোট স্কেল অ্যাপ, embedded systems | Python প্রজেক্টে ডেটাবেইজ সংক্রান্ত কাজের জন্য |
📌 সংক্ষেপে:
- SQLite → একটা সম্পূর্ণ ডেটাবেইজ সিস্টেম (যেটা ফাইল-ভিত্তিক)
- sqlite3 → Python-এ এই সিস্টেমের সাথে কাজ করার জন্য ইন্টারফেস
🛠️ কিভাবে একটি নতুন SQLite ডেটাবেইজ তৈরি বা কানেক্ট করতে হয়?
▶️ ধাপ ১: মডিউল ইমপোর্ট করো
import sqlite3
▶️ ধাপ ২: ডেটাবেইজ ফাইল তৈরি বা কানেক্ট করো
conn = sqlite3.connect("students.db")
🔹 যদি students.db
নামে কোনো ফাইল না থাকে, তাহলে এটা নতুন করে তৈরি হবে।
🔹 আর যদি ফাইল থাকে, তাহলে Python সেটাতে কানেক্ট করবে।
🎯 Cursor, Commit আর Close নিয়ে বিস্তারিত
🧠 1. Cursor কী?
cursor মানে হলো ডেটাবেইজের একজন worker বা একধরনের pointer, যেটা দিয়ে তুমি ডেটাবেইজে কমান্ড (যেমন CREATE, INSERT, SELECT ইত্যাদি) পাঠাও।
✅ কিভাবে তৈরি করবো?
import sqlite3
conn = sqlite3.connect("students.db")
cursor = conn.cursor()
🔹 cursor()
মেথড কল করলেই একটা cursor অবজেক্ট তৈরি হয়, যেটা দিয়ে তুমি SQL স্টেটমেন্ট execute করতে পারবে।
▶️ উদাহরণ:
cursor.execute("CREATE TABLE IF NOT EXISTS students (id INTEGER, name TEXT)")
📝
বোঝার মতো করে বললে:
ডেটাবেইজে কোনো কাজ করতে গেলে,
cursor
হলো সেই মেসেঞ্জার যেটা ডেটাবেইজের দরজায় গিয়ে বলে, “এই কাজটা করে ফেলো ভাই!”
💾 2. commit() - কেন দরকার?
যখন তুমি ডেটাবেইজে কিছু পরিবর্তন করো (যেমন নতুন ডেটা ঢোকাও, আপডেট করো বা ডিলিট করো), তখন commit() দিয়ে সেই পরিবর্তনগুলো স্থায়ী করতে হয়।
✅ ব্যবহার:
conn.commit()
🧠
উদাহরণ ছাড়া বোঝা মুশকিল, তাই..
cursor.execute("INSERT INTO students VALUES (1, 'Zakaria')")
conn.commit()
🔸 যদি commit()
না করো, তাহলে Python রানটাইমে হয়তো ইনসার্ট হবে, কিন্তু ফাইলটা save হবে না—তুমি প্রোগ্রাম বন্ধ করলেই সব data উধাও!
🛑 3. close() - এটা কেন দরকার?
কাজ শেষ হলে ডেটাবেইজ কানেকশন বন্ধ করে দেওয়াটা ভালো অভ্যাস। এতে করে মেমোরি খরচ কমে, ডেটা সুরক্ষিত থাকে, আর future bugs থেকে বাঁচা যায়।
✅ ব্যবহার:
conn.close()
💡
হ্যাঁ, close()
না করলেও কাজ চলতে পারে... কিন্তু এটা একটা bad habit।
তুমি যদি প্রো-লেভেলে যেতে চাও, তাহলে
close()
করা চাই-ই চাই।
🔁 এক নজরে Recap:
কাজ | কী করে | কখন ব্যবহার করবো |
cursor() | SQL execute করতে দেয় | যখনই ডেটাবেইজে কাজ শুরু করবো |
commit() | পরিবর্তন সেভ করে | নতুন ডেটা insert, update বা delete করার পর |
close() | কানেকশন বন্ধ করে | কাজ শেষ হওয়ার পর |
🧠 SQLite3 দিয়ে Python-এ SQL Query (CREATE, INSERT, SELECT, UPDATE, DELETE) ও ডেটা রিড করা
🧱 CREATE TABLE – টেবিল বানানো
ডেটা রাখার জন্য টেবিল লাগবে। প্রতিটা টেবিলের কলাম (column) আর data type থাকতে হয়।
cursor.execute("""
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER
)
""")
🧾 ব্যাখ্যা:
id
: ইউনিক নম্বর (PRIMARY KEY)
name
: নাম (TEXT),NOT NULL
মানে খালি থাকা যাবে না
age
: INTEGER টাইপ ডেটা
✍️ INSERT – নতুন ডেটা ঢোকানো
cursor.execute("INSERT INTO students (name, age) VALUES (?, ?)", ("Afrin", 21))
conn.commit()
কীভাবে অনেক গুলো ডেটা একসাথে ইনশার্ট করা যায় তা গুগল সার্চ থেকে জেনে নিন।
⚠️ কেন commit()
দরকার?
INSERT, UPDATE, DELETE – এইগুলা ডেটা পরিবর্তন করে, তাই commit() দিয়ে সেই পরিবর্তনটা স্থায়ী করতে হয়।
🔍 SELECT – ডেটা রিড করা / বের করা
এখন দেখা যাক কিভাবে টেবিল থেকে ডেটা বের করবো।
cursor.execute("SELECT * FROM students")
result = cursor.fetchall()
for row in result:
print(row)
📌 ব্যাখ্যা:
SELECT *
: সব কলাম রিড করো
fetchall()
: সব রো (row) একসাথে এনে লিস্ট আকারে দেয়
row
: প্রতিটা রো একটাtuple
→ যেমন(1, 'Afrin', 21)
🔁 Data Retrieve in Details: fetchone vs fetchall
এবার এখানে বেশি ব্যাখ্যা করবো কারণ এটাই সবচেয়ে বড় কনফিউশন।
🥇 fetchone()
→ একটি রো (row) রিটার্ন করে
cursor.execute("SELECT * FROM students")
row = cursor.fetchone()
print(row)
🔹 যদি ডেটা না থাকে, তাহলে None
রিটার্ন করবে।
🔁 বারবার কল করলে, একটার পর একটা করে row রিড হবে।
উদাহরণ:
cursor.execute("SELECT * FROM students")
print(cursor.fetchone()) # প্রথম রো
print(cursor.fetchone()) # দ্বিতীয় রো
🥈 fetchall()
→ সব রো রিটার্ন করে (list of tuples)
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
for r in rows:
print(f"নাম: {r[1]}, বয়স: {r[2]}")
🔸 ডেটা অনেক থাকলে, এটা বেটার। কিন্তু খুব বড় টেবিল হলে মেমোরি বেশি খায়।
🧠 কখন কোনটা ব্যবহার করবো?
কাজ | ব্যবহার করো |
শুধু একটা রো দরকার | fetchone() |
সব রো দরকার | fetchall() |
বড় টেবিল বা লুপে দরকার | fetchmany(n) (অপশনাল) |
এর থেকেও সুন্দর ভাবে ডেটা দেখা যায়, গুগল সার্চ করে উপায় গুলো জেনে নিন।
🛠️ UPDATE – ডেটা আপডেট করা
cursor.execute("UPDATE students SET age = ? WHERE name = ?", (22, "Afrin"))
conn.commit()
ব্যাখ্যা:
- যেই
name = "Afrin"
আছে, তারage
আমরা ২১ থেকে ২২ করেছি।
❌ DELETE – ডেটা ডিলিট করা
cursor.execute("DELETE FROM students WHERE name = ?", ("Afrin",))
conn.commit()
📌 আবার বলছি – WHERE
না দিলে সব ডেটা মুছে যাবে!
📤 Filtering & Searching Example:
cursor.execute("SELECT name FROM students WHERE age > 20")
names = cursor.fetchall()
for name in names:
print(name[0])
🔸 এখানে name[0]
কারণ fetchall()
এ প্রতিটা row টাপল হয়।
📚 Summary (Cheat Sheet Style)
কাজ | কোড | ব্যাখ্যা |
টেবিল বানানো | CREATE TABLE | ডেটা রাখার বক্স তৈরি |
ডেটা ঢোকানো | INSERT INTO | নতুন ডেটা ইনপুট |
ডেটা দেখা | SELECT | ডেটা পড়া |
পরিবর্তন | UPDATE | পুরাতন ডেটা চেঞ্জ |
মুছে ফেলা | DELETE | ডেটা ডিলিট |
পড়া | fetchone() / fetchall() | এক রো / সব রো রিড |
সেভ | commit() | ডেটা স্থায়ী |
বন্ধ | close() | রিসোর্স ফ্রি করা |