এই পর্বটা একটু অ্যাডভান্স লেভেলের (Advance Level), তাই যাদের ডাটাবেজ সম্পর্কে একেবারেই জ্ঞান নেই বা কেবলমাত্র পাইথন শুরু করছেন তারা এই পর্বটি বাদ দিতে পারেন।

পাইথনের ডাটাবেজ ইন্টারফেস অনেক সমৃদ্ধ, এবং অনেকগুলো ডাটাবেজ সিস্টেমকে সমর্থন করে। উল্লেখযোগ্য এবং সচরাচর ব্যবহৃত কিছু ডাটাবেজ সিস্টেমের নাম –

  • MySQL
  • Oracle
  • Microsoft SQL Server
  • PostgreSQL
  • Microsoft office Access
  • ইত্যাদি।

আরো কোন কোন ডাটাবেজ সিস্টেম নিয়ে পাইথনে কাজ করা যায় তার তালিকা এখানে পাওয়া যাবে।

এখানে আমরা অধিক জনপ্রিয় ডাটাবেস সিস্টেম MySQL নিয়ে আলোচনা করব।

এজন্য আমাদের সিস্টেমে MySQL এবং পাইথন MySQL ডাটাবেজ এপিআই (API) ইনস্টল থাকতে হবে।

আমি ধরে নিচ্ছি আপনাদের সিস্টেমে MySQL ইনস্টল করা আছে। ভাল হয় যদি PHPmyAdmin ও ইনস্টল করা থাকে। ডাটাবেজে পরিবর্তন গুলো ভিজ্যুয়ালি দেখার জন্য এর জুড়ি মেলা ভার। এগুলো যদি ইনস্টল না করা থাকে তাহলে আমি পরামর্শ দেব xampp ইনস্টল করতে, তাহলে এগুলো একসাথেই পাওয়া যাবে। ডাউনলোড লিংক এখানে।

তাহলে শুরু করা যাক-

একটা প্রোগ্রাম লেখে যাচাই করে নেই যে আমার সিস্টেমে MySQLdb এপিআই ইনস্টল করা আছে কিনা-

import MySQLdb

ফলাফল-

ModuleNotFoundError: No module named 'MYSQLdb'

অর্থাৎ, MySQLdb মডিউলটি ইনস্টল করা নেই। এখন এটাকে আমরা ইনস্টল করে নেব। রান কমান্ডে লিখি –

pip install MySQL-python

সবকিছু ঠিকঠাক থাকলে ইনস্টল হয়ে যাবে।

ডাটাবেজ কানেকশন তৈরি (Create Database Connection)

এখন আমরা কিভাবে একটি ডাটাবেজের সাথে কানেক্ট করতে পারি সেটা দেখে নেই। যেহেতু আমরা আমাদের সিস্টেমের সার্ভার ব্যবহার করছি তাই বাই ডিফল্ট এটার হোস্ট localhost, ইউজারনেম root এবং পাসওয়ার্ড খালি থাকবে।

কানেকশন দেবার জন্য নিচের কোডটি লিখি-

# This is an example for establishing database connection in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","")
print(conn)

ফলাফল আসবে-

<_mysql.connection open to 'localhost' at 346ed18>

অর্থাৎ কানেকশনটি সঠিকভাবে সম্পন্ন হয়েছে।

এখানে লক্ষনীয়, হোস্ট হিসেবে আমরা localhost ব্যবহার করেছি। localhost এর পরিবর্তে আইপি 127.0.0.1 ও ব্যবহার করা যায়; কিন্তু ব্যবহারিক দিক থেকে অনেক সময় রিমোট সার্ভার ব্যবহার করতে হতে পারে, সেক্ষেত্রে ডাটাবেজের সার্ভার এর URL দিতে হবে। উদাহরণস্বরুপ, আমি যদি এই ওয়েবসাইটের ডাটাবেজের সাথে কানেক্ট করতে চাই তাহলে আমাকে হোস্ট www.shahinur.com ব্যবহার করতে হবে।

ডাটাবেজ তৈরি (Create Database)

ডাটাবেক কানেকশন সম্পন্ন হলে যেকোন ডাটাবেজ অপারেশন করা যায়। এখন আমরা একটা ডাটাবেজ তৈরি করা দেখব-

# This is an example for creating a database in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","")

createcursor = conn.cursor()
createcursor.execute("CREATE DATABASE student")

এই কোডের মাধ্যমে student নামে একটি ডাটাবেজ তৈরি হবে। আমার মত যদি আপনারা phpMyAdmin ইনস্টল করে থাকেন তাহলে ব্রাউজারে localhost/phpmyadmin লিখে প্রবেশ করলে ডাটাবেজটি দেখতে পাবেন।

এখানে cursor() একটা অবজেক্ট যেটা বিভিন্ন একই কানেকশন ব্যবহার করে ভিন্নভিন্ন কাজ করতে সাহায্য করে।

এখানে execute() একটা মেথড যেটা মূলত SQL Query কে execute করে।

৬ নম্বর লাইনে যে CREATE DATABASE student লেখা হয়েছে সেটা মূলত একটা SQL স্টেটমেন্ট। এর পর থেকে আমরা যত কোড লিখব সেখানে আর পাইথনের তেমন প্রয়োজন নেই। SQL জানা থাকলেই হবে।

টেবিল তৈরি (Create Table)

একটু আগেই আমরা একটা ডাটাবেজ তৈরি করেছি, এখন সেই ডাটাবেজে টেবিল তৈরি করব। নিচের কোডটি দেখি –

# This is an example for creating a table in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","","student") # Need to mention the database name

createcursor = conn.cursor()
createcursor.execute("CREATE TABLE info (id INT, name VARCHAR(500), dept VARCHAR(200))")

সবকিছু ঠিকঠাক থাকলে student ডাটাবেজ এ একটা টেবিল তৈরি হবে।

এখানে ডাটাবেজ কানেকশনের ক্ষেত্রে একটা বিষয় স্মরণ রাখতে হবে যে, টেবিল একা একা তৈরি হতে পারেনা, যেকোন ডাটাবেজের অধীনে তৈরি হয়; তাই এখানে ৩য় লাইনে student ডাটাবেজের নামটি ব্যবহার করা হয়েছে।

৬ষ্ঠ লাইনে টেবিল তৈরির কমান্ড লেখা হয়েছে। info টেবিলে id, name এবং dept থাকবে। এখানে INT, VARCHAR এগুলো ডাটা টাইপ, অর্থাৎ এগুলো যে ধরণের ডাটা নিতে পারবে।

মনে রাখতে হবে, SQL পাইথনের মত ডাইনামিক্যালি টাইপ ডিফাইন্ড না, তাই ডাটা টাইপ দিয়ে দেওয়া আবশ্যক। ডাটা টাইপ সম্পর্কে আরো বিস্তারিত জানা যাবে এখানে

ডাটাবেজটি টেবিলে আছে কিনা বা কয়টি টেবিল আছে সেটা যাচাই করার জন্য নিচের কোডটি দেখি-

# This is an example for showing tables in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","","student") # Need to mention the database name

createcursor = conn.cursor()
createcursor.execute("SHOW TABLES") # Show table query

for i in createcursor: #diplay table using loop in case of multiple tables
    print(i)

ফলাফল-

('info',)

অর্থাৎ আমরা যে টেবিলটি তৈরি করেছি সেটা সঠিকভাবে তৈরি হয়েছে। এখানে একটা লুপের মাধ্যমে টেবিলগুলো প্রদর্শন করা হয়েছে, কারণ একটা ডাটাবেজে একাধিক টেবিল থাকতে পারে।

ইনসার্ট অপারেশন (Insert Operation)

টেবিল তৈরি করা হয়ে গেছে, এখন দেখব কিভাবে টেবিলে ভ্যালু প্রবেশ করাতে হয়। নিচের কোডটি লক্ষ্য করি –

# This is an example for inserting value to a table in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","","student") # Need to mention the database name

createcursor = conn.cursor()
createcursor.execute("INSERT INTO info (id, student_name, dept) VALUES(1,'SHAHINUR','CSE')") # Insert query

conn.commit()

ডাটাবেজে সঠিকভাবে ভ্যালু ইনসার্ট হয়েছে। ৬ষ্ঠ লাইনে আমরা সরাসরি একটা SQL লিখেছি।

৮ম লাইনে commit() ফাংশনটি ব্যবহার করা হয়েছে। এটা করা বাধ্যতামূলক, তা না হলে ডাটাবেজে কোন পরিবর্তন আসবে না।

রিড অপারেশন (Read Operation)

একটু আগেই আমরা ভ্যালু ইনসার্ট করা দেখেছি, এখন দেখব টেবিলে কোন ভ্যালু থাকলে কিভাবে সেটা রিড করতে হয় বা দেখতে হয়।

# This is an example for reading value from a table in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","","student") # Database connection

createcursor = conn.cursor()
createcursor.execute("SELECT * FROM info") # Select query

for i in createcursor:
    print(i)

ফলাফল-

(1, 'SHAHINUR', 'CSE')
(2, 'RAHIM', 'IPE')
(3, 'KARIM', 'MB')

অর্থাৎ আমাদের ডাটাবেজে সর্বমোট তিনজনের তথ্য আছে।

৬ষ্ঠ লাইনে SELECT * FROM info স্টেটমেন্টই মূলত ডাটাগুলোকে নিয়ে এসেছে। এখানে * বলতে বোঝায় ALL অর্থাৎ ডাটাবেজে যা যা আছে সবকিছুকেই সিলেক্ট করবে।

Where

ধরাযাক, আমরা ডাটাবেজের সকল তথ্য চাচ্ছিনা, শুধুমাত্র যারা CSE ডিপার্ট্মেন্টের তাদের তথ্য চাচ্ছি। এক্ষেত্রে where কন্ডিশন দিয়ে এই কাজটি করা যায়।

একটা উদাহরণ দেখে নেই –

# This is an example for reading a specific value from a table in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","","student") # Database connection

createcursor = conn.cursor()
createcursor.execute("SELECT * FROM info WHERE dept='CSE'") # Select query with where condition

for i in createcursor:
    print(i)

ফলাফল-

(1, 'SHAHINUR', 'CSE')

আমাদের ডাটাবেজে শুধুমাত্র একজনই CSE ডিপার্ট্মেন্টের আছে, তাই এখানে একজনকে দেখিয়েছে।

অর্থাৎ where ব্যবহার করা হয় কোন একটা কন্ডিশন বা শর্ত দেবার জন্য।

আপডেট অপারেশন (Update Operation)

এখন আমরা দেখব কিভাবে কোন একটা তথ্যকে মডিফাই করতে হয় অথবা আপডেট করতে হয়।

ধরা যাক, Karim প্রকৃতপক্ষে GEBT ডিপার্টমেন্টের ছাত্র কিন্তু ভূল করে MD তে চলে এসেছে। এখন আমরা MB কে GEBT তে আপডেট করে ভূলটা ঠিক করে দেব।

# This is an example for updating a specific value from a table in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","","student") # Database connection

createcursor = conn.cursor()
createcursor.execute("UPDATE info SET dept = 'GEBT' WHERE student_name = 'KARIM'") # Select query with where condition

conn.commit()

ডাটাবেজে MD এর স্থলে GEBT হয়ে গেছে। ৬ষ্ঠ লাইনে Update query টা লেখা হয়েছে। এটাকে সরাসরি কথ্য ভাষায় রুপান্তর করলে দাঁড়াবে –

info টেবিলটি আপডেট করুন যেখানে নাম KARIM সেখানে তার dept MB এর স্থলে GEBT হবে।

ডিলিট অপারেশন (Delete Operation)

এখন আমরা ডিলিট করা শিখব। ধরাযাক, RAHIM এর তথ্যটি ভূলবশত ডাটাবেজে প্রবেশ করানো হয়েছে। এখন এটাকে আমরা ডিলিট করব।

# This is an example for deleting a specific value from a table in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","","student") # Database connection

createcursor = conn.cursor()
createcursor.execute("DELETE FROM info WHERE student_name='RAHIM'") # Delete query with where condition

conn.commit()

info টেবিল থেকে RAHIM এর তথ্যটি মুছে যাবে।

ড্রপ অপারেশন (Drop Operation)

ড্রপ অর্থ মুছে ফেলা। বলে রাখা ভাল, MySQL এ কোন টেবিল বা ডাটাবেজকে মুছে ফেলতে drop কমান্ড ব্যবহার করা হয়; অর্থাৎ ডিলিট করা বলতে ড্রপ করাই বোঝাবে।

এখন আমরা info টেবিলটাকে মুছে ফেলব।

# This is an example for dropping a table in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","","student") # Database connection

createcursor = conn.cursor()
createcursor.execute("DROP TABLE IF EXISTS info") # drop query

conn.commit()

info টেবিলটি মুছে যাবে।

এখন আমরা student ডাটাবেজটিকেও মুছে ফেলব।

# This is an example for dropping a database in python
import MySQLdb
conn=MySQLdb.connect("localhost","root","","student") # Database connection

createcursor = conn.cursor()
createcursor.execute("DROP DATABASE student") # drop query

conn.commit()

ডাটাবেজটিও মুছে যাবে।

এখানে সবচেয়ে গুরুত্বপুর্ণ বিষয় হচ্ছে SQL সম্পর্কে ধারণা থাকা। যেকোন query কে execute() ফাংশনের ভিতর দিলেই সেটা এক্সিকিউট হবে।