Web2Py তে Models হল অ্যাপ্লিকেশনটির ডেটাবেস সম্পর্কিত অংশ। মডেলগুলি ডেটা ম্যানিপুলেশন, ডেটাবেস টেবিল সংজ্ঞায়ন এবং সম্পর্কিত কাজগুলো পরিচালনা করে। Web2Py-তে ডেটাবেস ইন্টারঅ্যাকশন (Database Interaction) খুবই সহজ এবং সরল। এটি ডেভেলপারদের SQLAlchemy বা অন্য কোনো জটিল ডেটাবেস ম্যানেজমেন্ট সিস্টেম ব্যবহার করার ঝামেলা ছাড়াই ডেটাবেসে কাজ করার সুবিধা দেয়।
এখানে Web2Py তে Models এবং Database Interaction এর কাজ এবং কিভাবে এগুলো ব্যবহার করতে হয়, তা বিস্তারিতভাবে আলোচনা করা হলো।
Web2Py Models
Web2Py তে Models সাধারণত /models ফোল্ডারে থাকে, এবং এগুলি ডেটাবেস সম্পর্কিত সব লজিক এবং টেবিল সংজ্ঞায়ন পরিচালনা করে। মডেল ফাইলের মধ্যে আপনি ডেটাবেস টেবিল তৈরি, ডেটা সংরক্ষণ, আপডেট, রিট্রিভ এবং ডিলিটের মতো কাজগুলো করতে পারেন।
Model ফাইলের কাঠামো
প্রতিটি মডেল ফাইল একটি ডেটাবেস সংযোগের সাথে সম্পর্কিত এবং এখানে টেবিলের সংজ্ঞা, সম্পর্কিত কাজগুলো থাকে। Web2Py ডিফল্টভাবে SQLite ব্যবহার করে, তবে MySQL, PostgreSQL সহ অন্যান্য ডাটাবেসও সমর্থন করে।
মডেল ফাইলের উদাহরণ
১. মডেল ফাইল তৈরি করা
ধরা যাক, আপনি একটি books অ্যাপ তৈরি করছেন এবং এতে ডেটাবেসে বইয়ের তথ্য সংরক্ষণ করতে চান। প্রথমে আপনাকে models ফোল্ডারে একটি মডেল ফাইল তৈরি করতে হবে, যেমন db.py।
# models/db.py
# ডেটাবেস সংযোগ (SQLite ব্যবহার করা হচ্ছে)
db = DAL('sqlite://storage.sqlite')
# টেবিল তৈরি
db.define_table('book',
Field('title', 'string'),
Field('author', 'string'),
Field('published_date', 'date'),
Field('price', 'float')
)
এখানে db হলো Web2Py এর ডেটাবেস অবজেক্ট এবং define_table ফাংশনটি ব্যবহার করে বইয়ের জন্য একটি টেবিল তৈরি করা হয়েছে। এই টেবিলে বইয়ের নাম, লেখক, প্রকাশের তারিখ এবং মূল্য সংরক্ষিত হবে।
২. ডেটা ম্যানিপুলেশন
ডেটা ম্যানিপুলেশন করতে, যেমন ডেটাবেসে তথ্য সন্নিবেশ (insert), আপডেট, রিট্রিভ বা ডিলিট করতে নিম্নলিখিত কোড ব্যবহার করতে পারেন:
ডেটা সন্নিবেশ (Insert):
# নতুন বই যোগ করা db.book.insert(title="Python for Beginners", author="John Doe", published_date="2024-01-01", price=29.99)ডেটা আপডেট (Update):
# বইয়ের দাম আপডেট করা db(db.book.title == 'Python for Beginners').update(price=39.99)ডেটা রিট্রিভ (Retrieve):
# সমস্ত বই রিট্রিভ করা books = db().select(db.book.ALL)ডেটা ডিলিট (Delete):
# একটি বই মুছে ফেলা db(db.book.title == 'Python for Beginners').delete()
৩. টেবিল সম্পর্ক (Table Relationships)
Web2Py তে আপনি একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করতে পারেন, যেমন এক-থেকে-কয়েক (one-to-many) বা কয়েক-থেকে-কয়েক (many-to-many) সম্পর্ক।
এক-থেকে-কয়েক সম্পর্ক (One-to-Many):
db.define_table('author', Field('name', 'string') ) # এক লেখকের একাধিক বই db.define_table('book', Field('title', 'string'), Field('author_id', db.author) # এটি এক-থেকে-কয়েক সম্পর্ক )এখানে,
bookটেবিলেরauthor_idফিল্ডauthorটেবিলের সাথে সম্পর্কিত।কয়েক-থেকে-কয়েক সম্পর্ক (Many-to-Many):
db.define_table('student', Field('name', 'string') ) db.define_table('course', Field('title', 'string') ) # ছাত্র এবং কোর্সের মধ্যে সম্পর্ক db.define_table('enrollment', Field('student_id', db.student), Field('course_id', db.course) )এখানে,
studentএবংcourseটেবিলের মধ্যে একটি many-to-many সম্পর্ক তৈরি করা হয়েছে।
Web2Py তে Database Interaction
Web2Py তে ডেটাবেস ইন্টারঅ্যাকশন করার জন্য DAL (Database Abstraction Layer) ব্যবহার করা হয়। এটি একটি শক্তিশালী ORM (Object-Relational Mapping) সিস্টেম, যা ডেটাবেস পরিচালনাকে সহজ করে। DAL এর মাধ্যমে, ডেভেলপাররা SQL কোড লিখতে না গিয়ে Python কোডের মাধ্যমে ডেটাবেস পরিচালনা করতে পারেন।
১. DAL সিস্টেম
Web2Py তে DAL ব্যবহার করে ডেটাবেস সংযোগ স্থাপন এবং ডেটাবেস টেবিলের সাথে যোগাযোগ করা হয়। একটি সাধারণ DAL সংযোগ এরকম হবে:
db = DAL('sqlite://storage.sqlite')
এখানে sqlite://storage.sqlite হল ডেটাবেসের URI। আপনি SQLite, PostgreSQL, MySQL, এবং অন্যান্য ডাটাবেস সিস্টেমে কাজ করতে পারেন।
২. ডেটাবেস ম্যানেজমেন্ট:
- টেবিল তৈরি: ডেটাবেসে নতুন টেবিল তৈরি করতে
define_table()ব্যবহার করা হয়, যা একটি নতুন টেবিল সংজ্ঞায়ন করে। - ফিল্ড তৈরি: প্রতিটি টেবিলের মধ্যে এক বা একাধিক Field থাকতে পারে, যা ডেটার ধরন এবং ফরম্যাট নির্ধারণ করে। উদাহরণস্বরূপ,
Field('name', 'string')একটি স্ট্রিং টাইপের ডেটা ফিল্ড তৈরি করে।
Web2Py এর মডেল এবং ডেটাবেস ইন্টারঅ্যাকশন এর সুবিধা
- সহজ ডেটাবেস পরিচালনা: Web2Py তে DAL সিস্টেমের মাধ্যমে ডেটাবেস পরিচালনা করা সহজ, এবং এতে কোনো SQL কোড লেখা লাগবে না।
- ইন্টিগ্রেটেড মডেল: Web2Py ডিফল্টভাবে SQLite সাপোর্ট করে, তবে MySQL বা PostgreSQL এর মতো অন্যান্য ডাটাবেসও ব্যবহার করা যায়।
- সম্পর্ক এবং কাস্টম টেবিল তৈরি: আপনি সহজেই এক-থেকে-কয়েক বা অনেক-থেকে-কয়েক সম্পর্ক তৈরি করতে পারেন, যা ডেটাবেসের লজিক্যাল কাঠামো তৈরি করে।
- বিল্ট-ইন ভ্যালিডেশন এবং ফর্ম: Web2Py তে SQLFORM এবং validation সিস্টেম রয়েছে, যা ডেটা ইনপুট এবং ফর্ম প্রক্রিয়া খুব সহজ করে।
সারাংশ
Web2Py তে Models এবং Database Interaction ডেভেলপারদের ডেটাবেসের সাথে সহজভাবে কাজ করার সুযোগ দেয়। DAL সিস্টেম এবং define_table() ফাংশনের মাধ্যমে ডেটাবেস টেবিল তৈরি এবং ডেটা প্রক্রিয়া করা খুবই সহজ। Web2Py তে আপনি সম্পর্কিত টেবিল এবং জটিল ডেটাবেস কাঠামোও সহজে পরিচালনা করতে পারেন।
Web2Py তে ডেটাবেস কানেকশন সেটআপ করা একটি গুরুত্বপূর্ণ কাজ, যা ওয়েব অ্যাপ্লিকেশনটির ডেটা সংরক্ষণ এবং পরিচালনার জন্য প্রয়োজনীয়। Web2Py ডিফল্টভাবে SQLite ডাটাবেস সিস্টেম ব্যবহার করে, তবে আপনি যদি MySQL বা PostgreSQL ব্যবহার করতে চান, তাহলে ডেটাবেস কানেকশন কনফিগারেশন আলাদা করতে হবে।
নিচে Web2Py তে বিভিন্ন ডাটাবেস কানেকশন সেটআপ করার প্রক্রিয়া আলোচনা করা হলো।
১. SQLite কানেকশন সেটআপ
Web2Py তে SQLite ডাটাবেস ব্যবহারের জন্য কোনো অতিরিক্ত কনফিগারেশন প্রয়োজন হয় না, কারণ এটি ডিফল্ট ডাটাবেস হিসেবে অন্তর্ভুক্ত থাকে। আপনি সহজেই db অবজেক্ট ব্যবহার করে ডাটাবেস সংযোগ করতে পারেন।
SQLite কানেকশন উদাহরণ:
# models/db.py
db = DAL('sqlite://storage.sqlite') # SQLite ডাটাবেস সংযোগ
এখানে, 'sqlite://storage.sqlite' সঠিক ডাটাবেস ফাইলের পথ দেখায়। Web2Py স্বয়ংক্রিয়ভাবে storage.sqlite নামক ফাইলটি তৈরি করবে যদি এটি না থাকে।
২. MySQL কানেকশন সেটআপ
Web2Py তে MySQL ডাটাবেস ব্যবহারের জন্য আপনাকে mysqlclient লাইব্রেরি ইনস্টল করতে হবে এবং সঠিক কানেকশন স্ট্রিং ব্যবহার করতে হবে।
MySQL কানেকশন সেটআপ:
MySQLClient ইনস্টল করা: প্রথমে, MySQL ডাটাবেস কানেকশন ব্যবহারের জন্য
mysqlclientইনস্টল করতে হবে। এটি Python এর জন্য একটি লাইব্রেরি যা MySQL ডাটাবেসের সাথে যোগাযোগ করার জন্য ব্যবহার করা হয়।pip install mysqlclient- MySQL কানেকশন স্ট্রিং: এর পর আপনি
DALঅবজেক্ট ব্যবহার করে MySQL ডাটাবেস কানেক্ট করতে পারবেন।
MySQL কানেকশন উদাহরণ:
# models/db.py
db = DAL('mysql://username:password@localhost/dbname') # MySQL কানেকশন
এখানে:
username— আপনার MySQL ইউজারের নাম।password— ইউজারের পাসওয়ার্ড।localhost— ডাটাবেস সার্ভারের হোস্ট (যদি এটি লোকালহোস্ট না হয়, তবে অন্য IP ঠিকানা ব্যবহার করুন)।dbname— আপনার ডাটাবেসের নাম।
৩. PostgreSQL কানেকশন সেটআপ
Web2Py তে PostgreSQL ডাটাবেস ব্যবহারের জন্য psycopg2 লাইব্রেরি ইনস্টল করতে হবে এবং সঠিক কানেকশন স্ট্রিং ব্যবহার করতে হবে।
PostgreSQL কানেকশন সেটআপ:
Psycopg2 ইনস্টল করা: PostgreSQL ডাটাবেস কানেকশন ব্যবহারের জন্য
psycopg2লাইব্রেরি ইনস্টল করা প্রয়োজন।pip install psycopg2- PostgreSQL কানেকশন স্ট্রিং: PostgreSQL ডাটাবেস কানেক্ট করার জন্য আপনি
DALঅবজেক্ট ব্যবহার করবেন, যেখানে ডাটাবেস কানেকশন স্ট্রিং উল্লেখ করা হয়।
PostgreSQL কানেকশন উদাহরণ:
# models/db.py
db = DAL('postgres://username:password@localhost/dbname') # PostgreSQL কানেকশন
এখানে:
username— PostgreSQL ইউজারের নাম।password— ইউজারের পাসওয়ার্ড।localhost— ডাটাবেস সার্ভারের হোস্ট (যদি এটি লোকালহোস্ট না হয়, তবে অন্য IP ঠিকানা ব্যবহার করুন)।dbname— PostgreSQL ডাটাবেসের নাম।
ডাটাবেস সংযোগ কনফিগারেশন ফাইল
Web2Py তে ডাটাবেস কানেকশন সাধারণত models/db.py ফাইলে রাখা হয়। এই ফাইলটিতে আপনার ডাটাবেস কনফিগারেশন কোড থাকবে এবং এটি আপনার অ্যাপ্লিকেশনের সাথে সংযুক্ত থাকবে। আপনি ডাটাবেসের জন্য মডেল ফাইলের মধ্যে টেবিল ডিফাইন করেও ডাটাবেসের কাজ পরিচালনা করতে পারেন।
উদাহরণ: মডেল ফাইল (db.py) তৈরি করা
# models/db.py
# SQLite ডাটাবেস কানেকশন
db = DAL('sqlite://storage.sqlite')
# অথবা MySQL / PostgreSQL কানেকশন
# db = DAL('mysql://username:password@localhost/dbname') # MySQL কানেকশন
# db = DAL('postgres://username:password@localhost/dbname') # PostgreSQL কানেকশন
# একটি টেবিল ডিফাইন করা
db.define_table('person',
Field('name', 'string'),
Field('email', 'string'))
# ডাটাবেস অপারেশন
db.person.insert(name="John Doe", email="john@example.com")
এখানে:
db.define_table()— টেবিল তৈরি করতে ব্যবহৃত হয়।db.person.insert()— টেবিলের মধ্যে ডেটা সন্নিবেশিত করতে ব্যবহৃত হয়।
ডাটাবেস অপারেশন (CRUD) উদাহরণ
Web2Py তে ডাটাবেস অপারেশন সাধারণত db অবজেক্টের মাধ্যমে করা হয়। এর মাধ্যমে আপনি Create, Read, Update, এবং Delete (CRUD) অপারেশন করতে পারেন।
উদাহরণ:
# Create: ডেটা সন্নিবেশিত করা
db.person.insert(name="Alice", email="alice@example.com")
# Read: ডেটা রিট্রিভ করা
people = db().select(db.person.ALL)
# Update: ডেটা আপডেট করা
db(db.person.name == "Alice").update(email="alice_new@example.com")
# Delete: ডেটা মুছে ফেলা
db(db.person.name == "Alice").delete()
সারাংশ
Web2Py তে ডেটাবেস কানেকশন সেটআপ করা সহজ। আপনি SQLite, MySQL, এবং PostgreSQL এর মধ্যে যেকোনো একটি ব্যবহার করতে পারেন। SQLite ডিফল্ট ডাটাবেস হিসেবে আসে, তবে MySQL এবং PostgreSQL ব্যবহার করতে আপনাকে নির্দিষ্ট লাইব্রেরি ইনস্টল করতে হবে এবং কানেকশন স্ট্রিং কনফিগার করতে হবে। এরপর আপনি DAL অবজেক্ট ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ করতে পারেন এবং CRUD অপারেশন সম্পাদন করতে পারেন।
Web2Py তে Database Models তৈরি করা অ্যাপ্লিকেশন ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ। Models হল অ্যাপ্লিকেশনের ডেটা লজিক এবং ডাটাবেসের সঙ্গে যোগাযোগের মাধ্যম। Web2Py এর ডেটাবেস মডেল তৈরি করতে DAL (Database Abstraction Layer) ব্যবহার করা হয়, যা বিভিন্ন ধরনের ডাটাবেস (যেমন SQLite, MySQL, PostgreSQL) সহজে পরিচালনা করতে সাহায্য করে।
Web2Py তে ডেটাবেস মডেল তৈরি করার জন্য models ফোল্ডারে ফাইল তৈরি করা হয় এবং সেখানে ডেটাবেস টেবিল, ফিল্ড এবং সম্পর্ক নির্ধারণ করা হয়।
Web2Py তে Database Model তৈরি করার পদ্ধতি
১. ডেটাবেস সংযোগ
প্রথমে, Web2Py-তে ডেটাবেস সংযোগের জন্য DAL (Database Abstraction Layer) ব্যবহার করতে হবে। এর মাধ্যমে আপনি Web2Py তে ডাটাবেসের সাথে যোগাযোগ করতে পারবেন।
Web2Py ডিফল্টভাবে SQLite ডাটাবেস ব্যবহার করে, তবে আপনি অন্য ডাটাবেস সিস্টেম যেমন MySQL বা PostgreSQL ব্যবহারও করতে পারেন। নিচে SQLite ডাটাবেস ব্যবহার করার একটি উদাহরণ দেখানো হলো।
২. ডেটাবেস মডেল ফাইল তৈরি করা
Web2Py তে models ফোল্ডারের মধ্যে ডেটাবেস মডেল ফাইল রাখা হয়। আপনি একটি নতুন মডেল ফাইল তৈরি করে তার মধ্যে ডেটাবেস টেবিল এবং সম্পর্ক সংজ্ঞা দিতে পারেন।
ধরা যাক, একটি বই (Book) সম্পর্কিত অ্যাপ্লিকেশন তৈরি করছি, যেখানে আমরা বইয়ের তথ্য সংরক্ষণ করব।
models/db.py ফাইলের মধ্যে ডেটাবেস মডেল সংজ্ঞা করা হবে।
# models/db.py
# ডেটাবেস সংযোগ স্থাপন
db = DAL('sqlite://storage.sqlite')
# টেবিল সংজ্ঞা
db.define_table('book',
Field('title', 'string', requires=IS_NOT_EMPTY()),
Field('author', 'string', requires=IS_NOT_EMPTY()),
Field('published_year', 'integer'),
Field('price', 'double'),
Field('created_at', 'datetime', default=request.now),
format='%(title)s') # প্রদর্শনে বইয়ের শিরোনাম থাকবে
এখানে book নামে একটি টেবিল তৈরি করা হয়েছে এবং এতে বিভিন্ন ধরনের Field (যেমন title, author, published_year) সংজ্ঞায়িত করা হয়েছে। requires এবং default কন্ডিশনও এখানে উল্লেখ করা হয়েছে।
৩. ফিল্ড টাইপ (Field Types)
Web2Py তে বিভিন্ন ধরনের ফিল্ড টাইপ রয়েছে, যেমন:
'string': টেক্সট ফিল্ড।'integer': পূর্ণসংখ্যা ফিল্ড।'double': দশমিক সংখ্যা।'boolean': সত্য/মিথ্যা মান।'datetime': তারিখ এবং সময়।'reference': অন্য টেবিলের রেফারেন্স।
উদাহরণ:
Field('author_id', 'reference author') # এটি 'author' টেবিলের সাথে সম্পর্কযুক্ত হবে
৪. ডেটাবেস টেবিল এবং রিলেশন
Web2Py তে টেবিলের মধ্যে সম্পর্ক তৈরি করা যায়। উদাহরণস্বরূপ, যদি একটি author টেবিল থাকে এবং আপনি বইয়ের author_id ফিল্ডে author টেবিলের রেফারেন্স চান, তাহলে আপনি এইভাবে সেটআপ করতে পারেন:
# models/db.py
db.define_table('author',
Field('name', 'string', requires=IS_NOT_EMPTY()),
Field('birthdate', 'date'),
format='%(name)s')
db.define_table('book',
Field('title', 'string', requires=IS_NOT_EMPTY()),
Field('author_id', 'reference author'), # 'author' টেবিলের রেফারেন্স
Field('price', 'double'),
format='%(title)s')
এখানে author_id ফিল্ডটি author টেবিলের সাথে সম্পর্কযুক্ত।
৫. ডেটাবেস মডেল ব্যবহার করা
ডেটাবেস মডেল তৈরি করার পর, আপনি ডেটা এন্ট্রি, আপডেট, নির্বাচন এবং মুছে ফেলাসহ অন্যান্য ডেটাবেস অপারেশন করতে পারেন।
ডেটা সিলেক্ট করা:
# controllers/default.py def show_books(): books = db().select(db.book.ALL) # সমস্ত বইয়ের তথ্য return dict(books=books)নতুন রেকর্ড ইনসার্ট করা:
# controllers/default.py def add_book(): form = SQLFORM(db.book) # 'book' টেবিলের জন্য ফর্ম if form.process().accepted: response.flash = 'Book added successfully!' elif form.errors: response.flash = 'Please correct the errors.' return dict(form=form)ডেটা আপডেট করা:
# controllers/default.py def update_book(): book = db.book(id=1) # ID 1 এর বই if book: book.update_record(title='Updated Title') response.flash = 'Book updated!' return dict(book=book)ডেটা মুছে ফেলা:
# controllers/default.py def delete_book(): db(db.book.id == 1).delete() # ID 1 এর বই মুছে ফেলা response.flash = 'Book deleted!' return redirect(URL('show_books'))
৬. ডেটাবেস মডেল ব্যবহারকারীর ফর্ম
Web2Py তে SQLFORM ব্যবহার করে ডেটাবেস মডেল ফর্ম তৈরি করা যায়। এর মাধ্যমে ইউজার ইনপুটের মাধ্যমে ডেটা ইনসার্ট, আপডেট বা ডিলিট করা সম্ভব।
# controllers/default.py
def add_book():
form = SQLFORM(db.book) # book টেবিলের জন্য ফর্ম তৈরি
if form.process().accepted:
response.flash = 'Book added successfully!'
elif form.errors:
response.flash = 'Please correct the errors.'
return dict(form=form)
এখানে SQLFORM(db.book) ব্যবহার করে একটি ফর্ম তৈরি করা হয়েছে, যেখানে ইউজার বইয়ের তথ্য ইনপুট করতে পারবেন।
সারাংশ
Web2Py তে ডেটাবেস মডেল তৈরি করার জন্য DAL (Database Abstraction Layer) ব্যবহার করা হয়। মডেল ফাইলের মধ্যে ডেটাবেস টেবিল, ফিল্ড এবং সম্পর্ক সংজ্ঞায়িত করা হয়। Web2Py-তে আপনি ডেটাবেস মডেল ব্যবহার করে ডেটা সিলেক্ট, ইনসার্ট, আপডেট, ডিলিট এবং অন্যান্য ডেটাবেস অপারেশন খুব সহজে করতে পারেন। SQLFORM এর মাধ্যমে ইউজারদের ডেটা ইনপুট করার জন্য ফর্ম তৈরি করা যায়।
Web2Py তে CRUD অপারেশন (Create, Read, Update, Delete) একটি গুরুত্বপূর্ণ অংশ, যা ডেটাবেসে ডেটা ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়। এই অপারেশনগুলো সহজে করা যায়, কারণ Web2Py ডিফল্টভাবে ডাটাবেস পরিচালনা ও ডেটা ম্যানিপুলেশনকে অনেকটা সরল করে দিয়েছে। নিচে আমরা প্রতিটি CRUD অপারেশন এবং Web2Py তে এগুলো কিভাবে কার্যকরী করা যায়, তা বিস্তারিতভাবে আলোচনা করব।
Web2Py তে CRUD অপারেশন
১. Create (তথ্য তৈরি করা)
Web2Py তে Create অপারেশনটি নতুন রেকর্ড ডাটাবেসে সংরক্ষণ করার জন্য ব্যবহৃত হয়। এর জন্য Web2Py এর SQLFORM অথবা ডিরেক্ট ডাটাবেস অপারেশন ব্যবহার করা যায়।
উদাহরণ: নতুন বইয়ের তথ্য তৈরি করা:
# controllers/default.py
def create_book():
form = SQLFORM(db.book)
if form.process().accepted:
response.flash = 'Book Created!'
elif form.errors:
response.flash = 'Form has errors!'
return dict(form=form)
এখানে:
SQLFORM(db.book)ফর্ম তৈরি করে, যাbookটেবিলের একটি রেকর্ড তৈরি করবে।form.process()ফর্মটি প্রক্রিয়া করে এবং সফল হলে "Book Created!" বার্তা দেখানো হয়।
২. Read (তথ্য পড়া)
Read অপারেশনটি ডাটাবেস থেকে তথ্য পড়তে ব্যবহৃত হয়। আপনি db অবজেক্ট এবং select() ফাংশন ব্যবহার করে ডেটা পড়ে নিতে পারেন।
উদাহরণ: বইয়ের তালিকা পড়া:
# controllers/default.py
def read_books():
books = db().select(db.book.ALL)
return dict(books=books)
এখানে:
db().select(db.book.ALL)কোডটিbookটেবিল থেকে সমস্ত রেকর্ড নির্বাচন করে এবং তাbooksভেরিয়েবলে সংরক্ষণ করে।- ভিউতে বইয়ের তালিকা প্রদর্শন করা হবে।
৩. Update (তথ্য আপডেট করা)
Update অপারেশনটি একটি নির্দিষ্ট রেকর্ডকে পরিবর্তন বা আপডেট করার জন্য ব্যবহৃত হয়। এটি SQLFORM এর মাধ্যমে সহজে করা যায়।
উদাহরণ: বইয়ের তথ্য আপডেট করা:
# controllers/default.py
def update_book():
book_id = request.args(0) # প্যারামিটার থেকে বইয়ের ID নেয়া
book = db.book(book_id) # সেই বইটি খুঁজে পাওয়া
form = SQLFORM(db.book, book) # বইটি আপডেট করার জন্য ফর্ম
if form.process().accepted:
response.flash = 'Book Updated!'
elif form.errors:
response.flash = 'Form has errors!'
return dict(form=form)
এখানে:
request.args(0)প্যারামিটার থেকে বইয়ের ID নেয়া হয়।SQLFORM(db.book, book)ব্যবহার করে সেই বইটি আপডেট করার জন্য ফর্ম তৈরি করা হয়।- ফর্মটি প্রক্রিয়া করা হলে বইয়ের তথ্য আপডেট হয়।
৪. Delete (তথ্য মুছে ফেলা)
Delete অপারেশনটি একটি নির্দিষ্ট রেকর্ড মুছে ফেলার জন্য ব্যবহৃত হয়। এটি db অবজেক্টের delete() ফাংশন ব্যবহার করে করা হয়।
উদাহরণ: বইয়ের তথ্য মুছে ফেলা:
# controllers/default.py
def delete_book():
book_id = request.args(0) # প্যারামিটার থেকে বইয়ের ID নেয়া
db(db.book.id == book_id).delete() # বইয়ের রেকর্ড মুছে ফেলা
redirect(URL('read_books')) # বইয়ের তালিকা পেজে রিডিরেক্ট
এখানে:
db(db.book.id == book_id).delete()কোডটি নির্দিষ্ট বইয়ের রেকর্ড মুছে ফেলে।redirect(URL('read_books'))ব্যবহার করে বইয়ের তালিকা পেজে রিডিরেক্ট করা হয়।
SQLFORM ব্যবহার করে CRUD
Web2Py তে SQLFORM ক্লাসটি ব্যবহার করে খুব সহজেই CRUD অপারেশন করা যায়। SQLFORM হলো একটি ডাইনামিক ফর্ম জেনারেটর যা মডেল অনুযায়ী HTML ফর্ম তৈরি করে এবং ফর্ম প্রক্রিয়া করে।
Create: SQLFORM(db.table_name) ব্যবহার করে নতুন রেকর্ড তৈরি করা।
Read: ডাটাবেস থেকে রেকর্ড পড়তে db.table_name.select() ব্যবহার করা।
Update: SQLFORM(db.table_name, record) ব্যবহার করে নির্দিষ্ট রেকর্ড আপডেট করা।
Delete: db(db.table_name.id == record_id).delete() ব্যবহার করে নির্দিষ্ট রেকর্ড মুছে ফেলা।
CRUD অপারেশন-এর ভিউ (View)
Web2Py তে CRUD অপারেশন করার জন্য ভিউ (HTML টেমপ্লেট) খুব গুরুত্বপূর্ণ। ভিউয়ের মাধ্যমে আপনি ইউজারের ইনপুট এবং ডেটা প্রদর্শন করতে পারেন।
Create ভিউ (New Book Form):
<h1>Add a New Book</h1>
{{=form}}
Read ভিউ (Books List):
<h1>Books List</h1>
<table>
<tr><th>Title</th><th>Author</th><th>Actions</th></tr>
{{for book in books:}}
<tr>
<td>{{=book.title}}</td>
<td>{{=book.author}}</td>
<td>
<a href="{{=URL('update_book', args=[book.id])}}">Edit</a> |
<a href="{{=URL('delete_book', args=[book.id])}}">Delete</a>
</td>
</tr>
{{pass}}
</table>
Update ভিউ (Edit Book Form):
<h1>Edit Book</h1>
{{=form}}
সারাংশ
Web2Py তে CRUD অপারেশন (Create, Read, Update, Delete) খুব সহজ এবং স্বয়ংক্রিয়ভাবে পরিচালনা করা যায়। Web2Py এর SQLFORM ক্লাস ডাটাবেস ম্যানিপুলেশন এবং ফর্ম প্রক্রিয়া করার জন্য ব্যবহৃত হয়। create_book() ফাংশন ব্যবহার করে নতুন বই তৈরি করা, read_books() ফাংশন ব্যবহার করে বইয়ের তালিকা পড়া, update_book() ফাংশন দিয়ে বইয়ের তথ্য আপডেট করা এবং delete_book() ফাংশন দিয়ে বইয়ের তথ্য মুছে ফেলা যায়। Web2Py এর ফিচারগুলো ব্যবহার করে আপনি ডেটাবেস পরিচালনা করতে পারেন খুব সহজেই।
Web2Py-তে Relations এবং Associations হল ডাটাবেস সম্পর্কের মৌলিক ধারণা, যা ডেটা মডেলিংয়ের জন্য ব্যবহৃত হয়। One-to-Many এবং Many-to-Many সম্পর্কগুলি ডাটাবেসের মধ্যে টেবিলগুলোর সম্পর্ক স্থাপন করতে সাহায্য করে। Web2Py তে এই সম্পর্কগুলি DAL (Database Abstraction Layer) এর মাধ্যমে খুব সহজে ম্যানেজ করা যায়। এই সম্পর্কগুলি অ্যাপ্লিকেশনের মধ্যে ডেটা সংগঠিত করার জন্য খুব গুরুত্বপূর্ণ।
One-to-Many সম্পর্ক
One-to-Many সম্পর্ক তখন তৈরি হয়, যখন একটি টেবিলের এক রেকর্ড একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে। যেমন, একটি ক্যাটেগরি একাধিক বই থাকতে পারে, কিন্তু প্রতিটি বই শুধুমাত্র একটি ক্যাটেগরির সাথে সম্পর্কিত থাকবে।
Web2Py তে One-to-Many সম্পর্ক তৈরি করা
DAL (Database Abstraction Layer) ব্যবহার করে Web2Py তে One-to-Many সম্পর্ক তৈরি করা যায়। এই সম্পর্কটি তৈরি করতে দুটি টেবিলের মধ্যে একটি ফিল্ডের মাধ্যমে সম্পর্ক স্থাপন করা হয়।
উদাহরণ:
ধরা যাক, আমাদের Category এবং Book নামক দুটি টেবিল রয়েছে, যেখানে একটি ক্যাটেগরির সাথে অনেক বই সম্পর্কিত।
models/db.py:
db = DAL('sqlite://storage.db') # Category টেবিল db.define_table('category', Field('name', 'string')) # Book টেবিল - One-to-Many সম্পর্কের জন্য category_id ফিল্ড যুক্ত করা হচ্ছে db.define_table('book', Field('title', 'string'), Field('author', 'string'), Field('category_id', db.category)) # category_id এখানে One-to-Many সম্পর্ক স্থাপন করছেcontrollers/default.py:
def index(): categories = db().select(db.category.ALL) return dict(categories=categories)views/default/index.html:
<h1>Categories</h1> <ul> {{for category in categories:}} <li>{{=category.name}}</li> <ul> {{for book in db(db.book.category_id == category.id).select():}} <li>{{=book.title}} by {{=book.author}}</li> {{pass}} </ul> {{pass}} </ul>
এখানে, category_id ফিল্ডটি book টেবিলের মধ্যে One-to-Many সম্পর্ক স্থাপন করেছে। প্রতিটি বই শুধুমাত্র একটি ক্যাটেগরির সঙ্গে সম্পর্কিত হবে, এবং আমরা ক্যাটেগরি অনুযায়ী বইয়ের তালিকা দেখাতে পারব।
Many-to-Many সম্পর্ক
Many-to-Many সম্পর্ক তখন তৈরি হয়, যখন দুটি টেবিলের মধ্যে একাধিক রেকর্ড একে অপরের সাথে সম্পর্কিত থাকে। যেমন, একজন স্টুডেন্ট একাধিক কোর্স নিতে পারে এবং এক একটি কোর্সে একাধিক স্টুডেন্ট থাকতে পারে।
Web2Py তে Many-to-Many সম্পর্ক তৈরি করা
Many-to-Many সম্পর্ক তৈরি করতে একটি জংশন টেবিল ব্যবহার করা হয়, যা দুটি টেবিলের মধ্যে সম্পর্ক তৈরি করে। এই জংশন টেবিলটি সাধারণত দুটি টেবিলের প্রাইমারি কীগুলি ধারণ করে।
উদাহরণ:
ধরা যাক, আমাদের Student এবং Course টেবিল রয়েছে, এবং আমরা একটি Student-Course জংশন টেবিল তৈরি করব।
models/db.py:
db = DAL('sqlite://storage.db') # Student টেবিল db.define_table('student', Field('name', 'string')) # Course টেবিল db.define_table('course', Field('name', 'string')) # Student-Course জংশন টেবিল db.define_table('student_course', Field('student_id', db.student), Field('course_id', db.course))controllers/default.py:
def index(): students = db().select(db.student.ALL) courses = db().select(db.course.ALL) return dict(students=students, courses=courses) def enroll(): student_id = request.vars.student_id course_id = request.vars.course_id db.student_course.insert(student_id=student_id, course_id=course_id) redirect(URL('index'))views/default/index.html:
<h1>Students</h1> <ul> {{for student in students:}} <li>{{=student.name}}: <ul> {{for course in db(db.student_course.student_id == student.id).select(db.course.ALL):}} <li>{{=course.name}}</li> {{pass}} </ul> </li> {{pass}} </ul> <h1>Courses</h1> <ul> {{for course in courses:}} <li>{{=course.name}}</li> {{pass}} </ul>views/default/enroll.html:
<h1>Enroll in Course</h1> <form action="{{=URL('enroll')}}" method="POST"> <select name="student_id"> {{for student in students:}} <option value="{{=student.id}}">{{=student.name}}</option> {{pass}} </select> <select name="course_id"> {{for course in courses:}} <option value="{{=course.id}}">{{=course.name}}</option> {{pass}} </select> <button type="submit">Enroll</button> </form>
এখানে, Many-to-Many সম্পর্কটি student_course জংশন টেবিলের মাধ্যমে তৈরি করা হয়েছে, যা student_id এবং course_id এর সম্পর্ক স্থাপন করে। প্রতিটি স্টুডেন্ট একাধিক কোর্সে অংশগ্রহণ করতে পারে এবং প্রতিটি কোর্সে একাধিক স্টুডেন্ট থাকতে পারে।
Associations (সম্পর্ক)
Web2Py তে Associations হল এমন সম্পর্ক যা টেবিলগুলোর মধ্যে বিভিন্ন রকমের সম্পর্ক স্থাপন করে এবং ডেটা ম্যানিপুলেশন সহজ করে। One-to-Many এবং Many-to-Many সম্পর্কের পাশাপাশি, Web2Py তে Relationship Field ব্যবহার করে আপনি বিভিন্ন ধরনের সম্পর্ক স্থাপন করতে পারেন।
উদাহরণ:
- One-to-Many Association: আমরা যখন একটি টেবিলের মধ্যে অন্য একটি টেবিলের ফিল্ড রেফারেন্স করি, তখন আমরা একটি One-to-Many সম্পর্ক তৈরি করি। যেমন,
bookটেবিলেরcategory_idফিল্ড, যাcategoryটেবিলের এক রেকর্ডের সাথে সম্পর্কিত। - Many-to-Many Association: Many-to-Many সম্পর্কের জন্য একটি জংশন টেবিল ব্যবহার করা হয়, যা দুটি টেবিলের মধ্যে সম্পর্ক তৈরি করে।
সারাংশ
Web2Py তে Relations (One-to-Many, Many-to-Many) এবং Associations হল ডেটাবেসের টেবিলগুলোর মধ্যে সম্পর্ক তৈরি করার গুরুত্বপূর্ণ ধারণা। One-to-Many সম্পর্ক তৈরি করতে একটি টেবিলের প্রাইমারি কীর মাধ্যমে অন্য টেবিলের সাথে সম্পর্ক স্থাপন করা হয়, এবং Many-to-Many সম্পর্ক তৈরি করতে একটি জংশন টেবিল ব্যবহার করা হয়। Web2Py তে এই সম্পর্কগুলি খুব সহজে DAL (Database Abstraction Layer) এর মাধ্যমে ম্যানেজ করা যায়।
Read more