SQLite একটি সার্ভারহীন, কনফিগারেশন-মুক্ত, ফাইল-ভিত্তিক হালকা ডেটাবেস ইঞ্জিন। পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে sqlite3 মডিউল (DB-API 2.0-compliant) রয়েছে, যা আলাদা ইনস্টল ছাড়াই SQLite ডেটাবেসে CRUD অপারেশন করতে দেয়।
কানেকশন তৈরি
import sqlite3
conn = sqlite3.connect('mydb.sqlite3') # ফাইল-ভিত্তিক
# অথবা মেমори-ভিত্তিক (টেম্পোরারি)
conn = sqlite3.connect(':memory:')
কানেকশন অবজেক্টের মূল মেথড
cursor()— কার্সর অবজেক্ট রিটার্ন করে (SQL এক্সিকিউশনের জন্য)।commit()— ট্রানজ্যাকশন কমিট করে ডিস্কে লেখে।rollback()— ট্রানজ্যাকশন রোলব্যাক করে।execute(sql)— ইমপ্লিসিট কার্সর बनाয়ে SQL এক্সিকিউট করে।executemany(sql, params)— বাল্ক ইনসার্ট/আপডেট।iterdump()— ডেটাবেসের SQL ডাম্প জেনারেট করে।backup(dest_conn)— অন্য কানেকশনে ব্যাকআপ (লাইভ ডেটাবেসে ممكن)।
কার্সর অবজেক্ট ও SQL এক্সিকিউশন
cur = conn.cursor()
cur.execute("""CREATE TABLE guests (
ID INTEGER PRIMARY KEY, name TEXT(20) NOT NULL,
address TEXT(40), city TEXT(20)
);""")
cur.execute("INSERT INTO guests VALUES (1, 'RAJU', 'ABIDS', 'HYDERABAD');")
# বাল্ক ইনসার্ট
addresses = [(2,'KISHAN','TILAK ROAD','PUNE'), (3,'LATA','GANDHI NAGAR','AURANGABAD')]
cur.executemany("INSERT INTO guests VALUES (:ID, :NAME, :ADD, :CITY)", addresses)
conn.commit()
ডেটা রিট্রিভ (Fetch)
# fetchone() - একটা একটা
cur.execute("SELECT * FROM guests;")
while True:
row = cur.fetchone()
if row is None: break
print(row)
# fetchall() - একসাথে সব
cur.execute("SELECT * FROM guests;")
rows = cur.fetchall()
for row in rows:
print(row)
SQLite ↔ পাইথন টাইপ ম্যাপিং
| পাইথন টাইপ | SQLite টাইপ |
|---|---|
| None | NULL |
| int | INTEGER |
| float | REAL |
| str | TEXT |
| bytes | BLOB |
সাধারণ এক্সেপশন ক্লাস
DatabaseError— ডেটাবেস-সম্পর্কিত ত্রুটি।IntegrityError— কনস্ট্রেইন্ট লঙ্ঘন (FK, UNIQUE)।ProgrammingError— SQL সিনট্যাক্স, টেবিল না থাকা ইত্যাদি।OperationalError— অপারেশনাল সমস্যা (লক, ডিস্ক ফুল)।NotSupportedError— অসমর্থিত API কল।
সেরা অনুশীলন: with conn: কনটেক্সট ম্যানেজার ব্যবহার করলে অটো-কমিট/রোলব্যাক হয়। প্যারামিটারাইজড কোয়েরি (? বা :name) ব্যবহার করে SQL ইনজেকশন প্রতিরোধ করুন।