পাইথন প্রোগ্রামারদের জন্য SQLite ব্যবহার করা অত্যন্ত সহজ, কারণ পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতেই sqlite3 নামে একটি মডিউল অন্তর্ভুক্ত আছে (পাইথন 2.5 সংস্করণ থেকে)। এই মডিউল DB-API 2.0 স্পেসিফিকেশন মেনে চলে, ফলে আপনি খুব দ্রুত ডাটাবেস সংযোগ স্থাপন, টেবিল তৈরি, ডেটা ইনসার্ট, আপডেট, ডিলিট এবং জিজ্ঞাসা করতে পারেন। আজকের পর্বে আমরা পাইথনে sqlite3-এর প্রধান ফাংশনগুলো, সংযোগ পদ্ধতি, কার্সর ব্যবহার, এবং একটি পূর্ণাঙ্গ CRUD উদাহরণ বাংলায় শিখব।
পূর্বপ্রস্তুতি
- পাইথন 3.x (বা 2.5+) আপনার সিস্টেমে ইনস্টল থাকতে হবে। আলাদা করে
sqlite3মডিউল ইন্সটল করতে হবে না; এটি পাইথনের সাথে বিল্ট-ইন আসে। - কোনো অতিরিক্ত প্যাকেজ বা কনফিগারেশনের প্রয়োজন নেই।
- আমরা স্ক্রিপ্ট ফাইল
.pyএক্সটেনশনে সংরক্ষণ করব এবং টার্মিনাল থেকেpython filename.pyদিয়ে চালাব।
১. sqlite3 মডিউলের গুরুত্বপূর্ণ API
নিচে পাইথনের sqlite3 মডিউলে বহুল ব্যবহৃত ফাংশন ও তাদের সংক্ষিপ্ত বিবরণ দেওয়া হলো।
| API | বর্ণনা |
|---|---|
sqlite3.connect(database) | নির্দিষ্ট ডাটাবেস ফাইলে সংযোগ স্থাপন করে। :memory: দিলে RAM-এ অস্থায়ী ডাটাবেস তৈরি হয়। টাইমআউট সেকেন্ড (ডিফল্ট 5.0) দেওয়া যায়। সংযোগ সফল হলে একটি কানেকশন অবজেক্ট রিটার্ন করে। |
connection.cursor() | একটি কার্সর অবজেক্ট তৈরি করে, যার মাধ্যমে SQL স্টেটমেন্ট এক্সিকিউট করা হয়। |
cursor.execute(sql, params) | একটি SQL স্টেটমেন্ট এক্সিকিউট করে। প্যারামিটারাইজড কোয়েরির জন্য ? বা নামযুক্ত প্লেসহোল্ডার (:name) ব্যবহার করা যায়। |
connection.execute(sql) | সংক্ষিপ্ত রূপ – নিজেই অস্থায়ী কার্সর তৈরি করে execute চালায়। |
cursor.executemany(sql, seq) | একই SQL স্টেটমেন্ট একাধিক প্যারামিটারের সেটের জন্য বারবার চালায়। |
cursor.executescript(sql_script) | একাধিক SQL স্টেটমেন্ট (সেমিকোলন দিয়ে পৃথক) একবারে চালায়। |
connection.commit() | বর্তমান ট্রানজ্যাকশন স্থায়ীভাবে সংরক্ষণ করে। |
connection.rollback() | শেষ commit()-এর পরের সব পরিবর্তন বাতিল করে। |
connection.close() | ডাটাবেস সংযোগ বন্ধ করে। খেয়াল রাখবেন, commit() না করে close() করলে পরিবর্তনগুলো হারিয়ে যাবে। |
cursor.fetchone() | ফলাফলের পরবর্তী একটি সারি টাপল হিসেবে ফেরত দেয়, না থাকলে None। |
cursor.fetchmany(size) | নির্দিষ্ট সংখ্যক সারির একটি তালিকা ফেরত দেয়। |
cursor.fetchall() | ফলাফলের বাকি সব সারির তালিকা ফেরত দেয়। |
connection.total_changes | সংযোগ খোলার পর থেকে মোট কতটি সারি পরিবর্তিত/যুক্ত/মুছে ফেলা হয়েছে। |
২. ডাটাবেসে সংযোগ (Connect)
নিচের কোড test.db ডাটাবেস খোলে (যদি না থাকে তবে তৈরি করে) এবং সফল হলে মেসেজ প্রিন্ট করে। আমরা পাইথন 3 স্টাইলে print ফাংশন ব্যবহার করছি।
python
#!/usr/bin/env python3
import sqlite3
conn = sqlite3.connect('test.db')
print("Opened database successfully")
conn.close()
রান করা: python connect.py (অথবা ./connect.py যদি এক্সিকিউটেবল করা থাকে)
আপনার ফোল্ডারে test.db ফাইল তৈরি হবে।
৩. টেবিল তৈরি (CREATE TABLE)
কার্সর তৈরি করে execute() দিয়ে DDL চালানো যায়।
python
import sqlite3
conn = sqlite3.connect('test.db')
print("Opened database successfully")
conn.execute('''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''')
print("Table created successfully")
conn.close()
একাধিক SQL স্টেটমেন্ট একসাথে executescript() ব্যবহার করে চালাতে পারেন।
৪. INSERT অপারেশন (নিরাপদ প্যারামিটারাইজড)
সরাসরি ভ্যালু জোড়া না দিয়ে প্যারামিটারাইজড কোয়েরি ব্যবহার করুন, যা SQL ইনজেকশন প্রতিরোধ করে। পাইথনের sqlite3-তে ? প্লেসহোল্ডার ব্যবহৃত হয়।
python
import sqlite3
conn = sqlite3.connect('test.db')
print("Opened database successfully")
# প্যারামিটার টাপল
conn.execute("INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (?, ?, ?, ?, ?)",
(1, 'Paul', 32, 'California', 20000.00))
conn.execute("INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (?, ?, ?, ?, ?)",
(2, 'Allen', 25, 'Texas', 15000.00))
conn.execute("INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (?, ?, ?, ?, ?)",
(3, 'Teddy', 23, 'Norway', 20000.00))
conn.execute("INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (?, ?, ?, ?, ?)",
(4, 'Mark', 25, 'Rich-Mond', 65000.00))
conn.commit()
print("Records created successfully")
conn.close()
executemany() ব্যবহার করে একাধিক ইনসার্ট:
python
data = [
(5, 'Karim', 30, 'Dhaka', 55000),
(6, 'Rahim', 28, 'CTG', 48000)
]
conn.executemany("INSERT INTO COMPANY (ID, NAME, AGE, ADDRESS, SALARY) VALUES (?, ?, ?, ?, ?)", data)
conn.commit()
৫. SELECT অপারেশন
execute() একটি কার্সর রিটার্ন করে যা ইটারেবল; অথবা fetchall() দিয়ে লিস্ট পেতে পারেন।
python
import sqlite3
conn = sqlite3.connect('test.db')
print("Opened database successfully")
cursor = conn.execute("SELECT id, name, address, salary FROM COMPANY")
for row in cursor:
print("ID =", row[0])
print("NAME =", row[1])
print("ADDRESS =", row[2])
print("SALARY =", row[3], "\n")
print("Operation done successfully")
conn.close()
fetchone() ব্যবহার করে একটি রেকর্ড:
python
cursor = conn.execute("SELECT * FROM COMPANY WHERE ID = 1")
row = cursor.fetchone()
if row:
print(row)
৬. UPDATE অপারেশন
execute() দিয়ে আপডেট করে commit() করতে হবে। total_changes প্রোপার্টি মোট পরিবর্তিত সারির সংখ্যা দেয়।
python
import sqlite3
conn = sqlite3.connect('test.db')
print("Opened database successfully")
conn.execute("UPDATE COMPANY set SALARY = ? WHERE ID = ?", (25000.00, 1))
conn.commit()
print("Total number of rows updated:", conn.total_changes)
cursor = conn.execute("SELECT id, name, address, salary FROM COMPANY")
for row in cursor:
print("ID =", row[0])
print("NAME =", row[1])
print("ADDRESS =", row[2])
print("SALARY =", row[3], "\n")
print("Operation done successfully")
conn.close()
৭. DELETE অপারেশন
একইভাবে execute() ও commit()।
python
import sqlite3
conn = sqlite3.connect('test.db')
print("Opened database successfully")
conn.execute("DELETE FROM COMPANY WHERE ID = ?", (2,))
conn.commit()
print("Total number of rows deleted:", conn.total_changes)
cursor = conn.execute("SELECT id, name, address, salary FROM COMPANY")
for row in cursor:
print("ID =", row[0])
print("NAME =", row[1])
print("ADDRESS =", row[2])
print("SALARY =", row[3], "\n")
print("Operation done successfully")
conn.close()
৮. ডিরেক্টরি স্ট্রাকচার ও প্যাকেজ
আপনার প্রোজেক্ট ফোল্ডারে পাইথন স্ক্রিপ্ট ও ডাটাবেস ফাইল থাকবে:
text
python-sqlite-demo/ ├── connect.py ├── create_table.py ├── insert.py ├── select.py ├── update.py ├── delete.py └── test.db
প্যাকেজ: কোনো আলাদা প্যাকেজ ইন্সটল করতে হবে না। পাইথনের স্ট্যান্ডার্ড লাইব্রেরি sqlite3 মডিউল যথেষ্ট। শুধুমাত্র পাইথন ইন্সটল থাকলেই চলবে।
৯. গুরুত্বপূর্ণ টিপস ও নিরাপত্তা
- প্যারামিটারাইজড কোয়েরি মাস্ট: কখনোই ইউজার ইনপুট সরাসরি SQL স্ট্রিংয়ে জুড়বেন না।
?বা:nameপ্লেসহোল্ডার ব্যবহার করুন। এটি SQL ইনজেকশন থেকে রক্ষা করে। - commit() ভুলবেন না:
INSERT,UPDATE,DELETE-র পরconn.commit()কল না করলে আপনার পরিবর্তন সংরক্ষিত হবে না; প্রোগ্রাম শেষেclose()করলে অটো-রোলব্যাক হতে পারে। আপনিconnকে কনটেক্সট ম্যানেজার হিসেবে ব্যবহার করতে পারেন:pythonwith sqlite3.connect(‘test.db’) as conn: conn.execute(“INSERT …”) # with ব্লক শেষে স্বয়ংক্রিয়ভাবে commit() হয় (যদি কোনো এক্সেপশন না ঘটে) - কার্সর বন্ধ: কার্সর ব্যবহার শেষে
cursor.close()করতে ভুলবেন না, অথবাwithস্টেটমেন্ট ব্যবহার করুন:pythonwith conn: conn.execute(sql) - ROW ফ্যাক্টরি: কলামের নাম দিয়ে ডেটা অ্যাক্সেস করতে
conn.row_factory = sqlite3.Rowসেট করুন, তারপরrow['NAME']এভাবে পাবেন। - ডেটা টাইপ: পাইথনের
NoneSQLite-এরNULL-এ ম্যাপ হয়। - একাধিক থ্রেড: একই সংযোগ একাধিক থ্রেড থেকে ব্যবহার না করাই ভালো। প্রয়োজনে আলাদা সংযোগ তৈরি করুন।
১০. সম্পূর্ণ অনুশীলন (একক স্ক্রিপ্টে CRUD)
নিচের পাইথন স্ক্রিপ্টটি টেবিল তৈরি, ইনসার্ট, সিলেক্ট, আপডেট ও ডিলিট একত্রে করে:
python
import sqlite3
# সংযোগ ও টেবিল তৈরি
conn = sqlite3.connect('test.db')
conn.execute('''CREATE TABLE IF NOT EXISTS COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL)''')
# ইনসার্ট
conn.execute("INSERT OR REPLACE INTO COMPANY VALUES (1, 'Paul', 32, 'California', 20000)")
conn.execute("INSERT OR REPLACE INTO COMPANY VALUES (2, 'Allen', 25, 'Texas', 15000)")
conn.commit()
# সিলেক্ট
print("All records:")
for row in conn.execute("SELECT * FROM COMPANY"):
print(row)
# আপডেট
conn.execute("UPDATE COMPANY SET SALARY = 30000 WHERE ID = 1")
print("Rows updated:", conn.total_changes)
conn.commit()
# ডিলিট
conn.execute("DELETE FROM COMPANY WHERE ID = 2")
print("Rows deleted:", conn.total_changes)
conn.commit()
conn.close()
পরবর্তী পর্বে
আমরা SQLite সিরিজের শেষ পর্বে সারাংশ, অন্যান্য ভাষায় SQLite ও শেখার পরবর্তী ধাপ নিয়ে আলোচনা করব।
লেখকের কথা: পাইথন ও SQLite-এর যুগলবন্দি ডেটা-চালিত অ্যাপ্লিকেশন তৈরির সবচেয়ে সহজ রাস্তা। বাংলায় SQLite শেখার এই সিরিজ সমাপ্তির পথে; আপনার আগ্রহ ও সহযোগিতাই আমাদের চালিকাশক্তি। পোস্টটি ভালো লাগলে শেয়ার করুন এবং ToLearnTeam.com সাবস্ক্রাইব করে সব আপডেট নিন। কোনো প্রশ্ন থাকলে কমেন্টে জানান – আমরা উত্তর দিতে প্রস্তুত!
SQLite Full Course
- SQLite পরিচিতি ও ইন্সটলেশন গাইড – বাংলায় প্রথম ডাটাবেস তৈরি
- SQLite কী এবং কেন শিখবেন? সম্পূর্ণ ওভারভিউ ও কমান্ড ক্লাসিফিকেশন (DDL, DML, DQL)
- SQLite ইন্সটলেশন গাইড – Windows, Linux ও Mac-এ ধাপে ধাপে সেটআপ
- SQLite ডট কমান্ড (Dot Commands) – সম্পূর্ণ গাইড, আউটপুট ফরম্যাট ও sqlite_master
- SQLite সিনট্যাক্স (Syntax) – কেস সেনসিটিভিটি, কমেন্ট, সব কমান্ডের গঠন ও উদাহরণ
- SQLite ডেটা টাইপ (Data Type) – স্টোরেজ ক্লাস, টাইপ অ্যাফিনিটি, বুলিয়ান ও ডেট-টাইম
- SQLite ডেটাবেস তৈরি (Create Database) – ধাপে ধাপে গাইড, .dump এক্সপোর্ট ও রিস্টোর
- SQLite ATTACH DATABASE – একাধিক ডাটাবেস সংযুক্ত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DETACH DATABASE – সংযুক্ত ডাটাবেস বিচ্ছিন্ন করার পূর্ণাঙ্গ গাইড
- SQLite CREATE TABLE স্টেটমেন্ট – টেবিল তৈরি করার পূর্ণাঙ্গ গাইড (বাংলা)
- SQLite DROP TABLE স্টেটমেন্ট – টেবিল ডিলিট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite INSERT INTO স্টেটমেন্ট – ডেটা ইনসার্ট করার সম্পূর্ণ গাইড (বাংলা)
- SQLite SELECT স্টেটমেন্ট – টেবিল থেকে ডেটা ফেচ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite অপারেটর (Operators) – Arithmetic, Comparison, Logical, Bitwise (বাংলা টিউটোরিয়াল)
- SQLite এক্সপ্রেশন (Expressions) – বুলিয়ান, নিউমেরিক ও ডেট এক্সপ্রেশন (বাংলা টিউটোরিয়াল)
- SQLite AND ও OR অপারেটর – একাধিক শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite UPDATE Query – টেবিলের ডেটা পরিবর্তন করার সম্পূর্ণ গাইড (বাংলা)
- SQLite DELETE Query – টেবিল থেকে ডেটা মুছে ফেলার সম্পূর্ণ গাইড (বাংলা)
- SQLite LIKE Operator – প্যাটার্ন মিলিয়ে ডেটা খোঁজার সম্পূর্ণ গাইড (বাংলা)
- SQLite GLOB Operator – কেস-সেনসিটিভ প্যাটার্ন মিলিয়ে ডেটা খোঁজা (বাংলা)
- SQLite LIMIT Clause – ডেটা সীমিত করে আনার সম্পূর্ণ গাইড (বাংলা)
- SQLite ORDER BY ক্লজ – ডেটা সাজানোর সম্পূর্ণ গাইড (বাংলা)
- SQLite GROUP BY ক্লজ – ডেটা গ্রুপ করে বিশ্লেষণ করার সম্পূর্ণ গাইড (বাংলা)
- SQLite HAVING ক্লজ – গ্রুপের উপর শর্ত দিয়ে ডেটা ফিল্টার (বাংলা টিউটোরিয়াল)
- SQLite DISTINCT Keyword – ডুপ্লিকেট ডেটা বাদ দিয়ে ইউনিক ভ্যালু পাওয়া (বাংলা)
- SQLite PRAGMA কমান্ড – ডাটাবেস কনফিগারেশন ও সেটিংস (বাংলা টিউটোরিয়াল)
- SQLite Constraints – NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, CHECK (বাংলা টিউটোরিয়াল)
- SQLite JOINS – CROSS JOIN, INNER JOIN, LEFT OUTER JOIN (বাংলা টিউটোরিয়াল)
- SQLite UNION ও UNION ALL – একাধিক SELECT একত্রিত করার সম্পূর্ণ গাইড (বাংলা)
- SQLite NULL Values – NULL কী, IS NULL, IS NOT NULL (বাংলা টিউটোরিয়াল)
- SQLite ALIAS Syntax – টেবিল ও কলামের অস্থায়ী নাম (বাংলা টিউটোরিয়াল)
- SQLite Triggers – স্বয়ংক্রিয় ট্রিগার তৈরি, ব্যবহার ও মুছে ফেলা (বাংলা টিউটোরিয়াল)
- SQLite Indexes – CREATE, UNIQUE, COMPOSITE, DROP INDEX (বাংলা টিউটোরিয়াল)
- SQLite INDEXED BY Clause – নির্দিষ্ট ইনডেক্স ব্যবহার ও NOT INDEXED (বাংলা)
- SQLite ALTER TABLE Command – টেবিলের গঠন পরিবর্তন (বাংলা টিউটোরিয়াল)
- SQLite TRUNCATE TABLE Command – DELETE ও DROP দিয়ে টেবিল খালি করা (বাংলা)
- SQLite Views – ভার্চুয়াল টেবিল তৈরি, ব্যবহার ও ডিলিট (বাংলা টিউটোরিয়াল)
- SQLite Transactions – BEGIN, COMMIT, ROLLBACK ও ACID প্রপার্টি (বাংলা)
- SQLite Subqueries – SELECT, INSERT, UPDATE, DELETE-এ সাবকোয়েরি ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite AUTOINCREMENT – স্বয়ংক্রিয়ভাবে প্রাইমারি কি মান বৃদ্ধি (বাংলা টিউটোরিয়াল)
- SQLite SQL Injection – কী, কেন বিপজ্জনক ও প্রতিরোধের উপায় (বাংলা টিউটোরিয়াল)
- SQLite EXPLAIN ও EXPLAIN QUERY PLAN – কোয়েরি বিশ্লেষণ (বাংলা টিউটোরিয়াল)
- SQLite VACUUM – ডাটাবেস পরিষ্কার, স্পেস রিক্লেইম ও অটো-ভ্যাকুয়াম (বাংলা টিউটোরিয়াল)
- SQLite Date & Time ফাংশন – date(), time(), datetime(), julianday(), strftime() (বাংলা টিউটোরিয়াল)
- SQLite Useful Functions – COUNT, MAX, MIN, AVG, SUM, RANDOM, ABS, UPPER, LOWER, LENGTH (বাংলা টিউটোরিয়াল)
- SQLite C/C++ প্রোগ্রামিং – sqlite3_open, exec, close, callback (বাংলা টিউটোরিয়াল)
- SQLite PHP প্রোগ্রামিং – PHP-তে SQLite ডাটাবেস ব্যবহার (বাংলা টিউটোরিয়াল)
- SQLite Perl প্রোগ্রামিং – DBI/DBD::SQLite দিয়ে ডাটাবেস অপারেশন (বাংলা)
- SQLite Python প্রোগ্রামিং – sqlite3 মডিউল দিয়ে CRUD অপারেশন (বাংলা টিউটোরিয়াল)
- SQLite Quick Guide – বাংলায় পূর্ণাঙ্গ সংক্ষিপ্ত টিউটোরিয়াল (শেখার সহজ গাইড)
