কম্পিউটার টিউটোরিয়াল

পাইথনে SQLite ডেটাবেস ইন্টারফেস (sqlite3 মডিউল)

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 টাইপ
NoneNULL
intINTEGER
floatREAL
strTEXT
bytesBLOB

সাধারণ এক্সেপশন ক্লাস

  • DatabaseError — ডেটাবেস-সম্পর্কিত ত্রুটি।
  • IntegrityError — কনস্ট্রেইন্ট লঙ্ঘন (FK, UNIQUE)।
  • ProgrammingError — SQL সিনট্যাক্স, টেবিল না থাকা ইত্যাদি।
  • OperationalError — অপারেশনাল সমস্যা (লক, ডিস্ক ফুল)।
  • NotSupportedError — অসমর্থিত API কল।

সেরা অনুশীলন: with conn: কনটেক্সট ম্যানেজার ব্যবহার করলে অটো-কমিট/রোলব্যাক হয়। প্যারামিটারাইজড কোয়েরি (? বা :name) ব্যবহার করে SQL ইনজেকশন প্রতিরোধ করুন।

  1. অবজেক্ট-ওরিয়েন্টেড ডাটাবেস

  2. ক্লাউড ডাটাবেস

  3. টکইন্টার (Tkinter) বাটনের কমান্ড মেথড ডাইনামিকভাবে পরিবর্তন করা

  4. PyMongo এবং অন্যান্য Python লাইব্রেরি দিয়ে ডাটাবেস ইন্টিগ্রেশনে দক্ষতা অর্জন