SQLite এবং পাইথন
পাইথনের বিল্ট-ইন sqlite3 মডিউল ব্যবহার করে SQLite ডাটাবেসের সাথে কাজ করা যায়। আলাদা সার্ভার ছাড়া ফাইল-ভিত্তিক ডাটাবেস।
কানেকশন স্থাপন
import sqlite3
# ডাটাবেস ফাইল তৈরি/ওপেন
conn = sqlite3.connect("tutorialspoint.db")
# কার্সর অবজেক্ট - SQL এক্সিকিউশনের মিডিয়েটর
cursor = conn.cursor()
টেবিল তৈরি ও ডেটা ইনসার্ট
# টেবিল তৈরি
create_table_sql = """
CREATE TABLE students (
id INTEGER PRIMARY KEY,
first_name VARCHAR(20),
last_name VARCHAR(30),
gender CHAR(1)
);
"""
cursor.execute(create_table_sql)
# ডেটা ইনসার্ট
cursor.execute('INSERT INTO students VALUES (1, "John", "Hill", "M");')
cursor.execute('INSERT INTO students VALUES (2, "Jessy", "Hill", "F");')
cursor.execute('INSERT INTO students VALUES (3, "Antony", "Hill", "M");')
# কমিট - পরিবর্তন সংরক্ষণ
conn.commit()
# কানেকশন বন্ধ
conn.close()
ডেটা কোয়েরি (SELECT)
conn = sqlite3.connect("tutorialspoint.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM students;")
students = cursor.fetchall() # সব রো ফেচ করুন
print(students)
# [(1, 'John', 'Hill', 'M'), (2, 'Jessy', 'Hill', 'F'), (3, 'Antony', 'Hill', 'M')]
conn.close()
প্যারামিটারাইজড কোয়েরি (সিকিউরিটি)
# SQL ইনজেকশন প্রতিরোধে প্লেসহোল্ডার ব্যবহার করুন
cursor.execute("INSERT INTO students VALUES (?, ?, ?, ?)",
(4, "New", "Student", "M"))
# নামড প্লেসহোল্ডার
cursor.execute("INSERT INTO students (first_name, last_name, gender) VALUES (:fn, :ln, :g)",
{"fn": "Jane", "ln": "Doe", "g": "F"})
কনটেক্সট ম্যানেজার (বেস্ট প্র্যাক্টিস)
# with স্টেটমেন্ট ব্যবহার করে অটো কমিট/রোলব্যাক
with sqlite3.connect("tutorialspoint.db") as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM students WHERE gender = ?", ("M",))
male_students = cursor.fetchall()
print(male_students)
# কানেকশন অটোমেটিক ক্লোজ হয়
উপসংহার
sqlite3— পাইথনের বিল্ট-ইন, কোনো ইনস্টল লাগে না- সবসময় **প্যারামিটারাইজড কোয়েরি** ব্যবহার করুন (SQL ইনজেকশন প্রতিরোধ)
withস্টেটমেন্ট ব্যবহার করে রিসোর্স ম্যানেজমেন্ট- বড় অ্যাপ্লিকেশনের জন্য ORM (SQLAlchemy) বিবেচনা করুন