পাইথন এবং অবজেক্ট-রিলেশনাল ম্যাপ সম্পর্কে আপনার যা জানা দরকার

পাইথন এবং অবজেক্ট-রিলেশনাল ম্যাপ সম্পর্কে আপনার যা জানা দরকার

আপনি হয়তো অবজেক্ট-রিলেশনাল ম্যাপিং (ORM) সম্পর্কে শুনেছেন। আপনি এমনকি একটি ব্যবহার করতে পারেন, কিন্তু তারা ঠিক কি? এবং আপনি কিভাবে পাইথনে তাদের ব্যবহার করবেন?





ওআরএম এবং পাইথন সম্পর্কে আপনার যা জানা দরকার তা এখানে।





একটি ORM কি?

অবজেক্ট-রিলেশনাল ম্যাপিং (ORM) একটি প্রোগ্রামিং টেকনিক যা ডাটাবেস অ্যাক্সেস করতে ব্যবহৃত হয়। এটি আপনার ডাটাবেসকে বস্তুর একটি সিরিজে প্রকাশ করে। তথ্য সন্নিবেশ বা পুনরুদ্ধার করার জন্য আপনাকে SQL কমান্ড লিখতে হবে না, আপনি বস্তুর সাথে সংযুক্ত বৈশিষ্ট্য এবং পদ্ধতিগুলির একটি সিরিজ ব্যবহার করেন।





এটি জটিল এবং অপ্রয়োজনীয় মনে হতে পারে, কিন্তু তারা আপনার অনেক সময় বাঁচাতে পারে, এবং আপনার ডাটাবেসের অ্যাক্সেস নিয়ন্ত্রণে সাহায্য করতে পারে।

এখানে একটি উদাহরণ। বলুন যে যখনই আপনি আপনার ডাটাবেসে একটি পাসওয়ার্ড youোকান তখন আপনি এটি হ্যাশ করতে চান, যেমন ওয়েবসাইটের পাসওয়ার্ড সুরক্ষায় ব্যাখ্যা করা হয়েছে। সাধারণ ব্যবহারের ক্ষেত্রে এটি একটি সমস্যা নয় --- আপনি সন্নিবেশ করার আগে গণনা করুন। কিন্তু যদি কোডের অনেক জায়গায় আপনার একটি রেকর্ড োকানোর প্রয়োজন হয়? যদি অন্য প্রোগ্রামার আপনার টেবিলে erুকিয়ে দেয়, এবং আপনি সম্পর্কে জানেন না?



একটি ORM ব্যবহার করে, আপনি কোড লিখতে পারেন তা নিশ্চিত করার জন্য যে যখনই এবং যেখানেই আপনার ডাটাবেসের কোন সারি বা ক্ষেত্র অ্যাক্সেস করা হয়, আপনার অন্য, কাস্টম কোডটি প্রথমে কার্যকর করা হয়।

এটি 'সত্যের একক উৎস' হিসেবেও কাজ করে। আপনি যদি একটি কাস্টম হিসাব পরিবর্তন করতে চান, তাহলে আপনাকে শুধুমাত্র একটি জায়গায় পরিবর্তন করতে হবে, একাধিক নয়। এই নীতিগুলির অনেকগুলি সম্পাদন করা সম্ভব পাইথনে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) , কিন্তু ORM গুলি OOP নীতিমালার সাথে মিলে কাজ করে একটি ডাটাবেসে অ্যাক্সেস নিয়ন্ত্রণ করতে।





ORM ব্যবহার করার সময় কিছু বিষয় খেয়াল রাখতে হয়, এবং এমন কিছু পরিস্থিতি আছে যেখানে আপনি একটি ব্যবহার করতে নাও পারেন, কিন্তু সেগুলি সাধারণত একটি ভাল জিনিস বলে মনে করা হয়, বিশেষ করে একটি বড় কোডবেসে।

SQLAlchemy ব্যবহার করে পাইথনে ORM

পাইথনে অনেক কাজের মতো, আপনার নিজের লেখার চেয়ে মডিউল আমদানি করা দ্রুত এবং সহজ। অবশ্যই, আপনার নিজের ORM লেখা সম্ভব, কিন্তু কেন চাকাটি পুনরায় উদ্ভাবন করুন?





নিম্নলিখিত উদাহরণগুলি সব ব্যবহার করে SQLAlchemy , একটি জনপ্রিয় পাইথন ORM, কিন্তু বাস্তবায়ন নির্বিশেষে অনেক নীতি প্রযোজ্য।

SQLAlchemy এর জন্য পাইথন সেট আপ করা হচ্ছে

ডানদিকে ঝাঁপ দেওয়ার আগে, আপনাকে SQLAlchemy দিয়ে পাইথন বিকাশের জন্য আপনার মেশিন সেটআপ করতে হবে।

এই উদাহরণগুলির সাথে অনুসরণ করার জন্য আপনাকে পাইথন 3.6 ব্যবহার করতে হবে। যদিও পুরানো সংস্করণগুলি কাজ করবে, নীচের কোডটি চালানোর আগে কিছু পরিবর্তন প্রয়োজন। পার্থক্য সম্পর্কে নিশ্চিত নন? আমাদের পাইথন FAQ সমস্ত পার্থক্য কভার করে।

কোডিং করার আগে, আপনার একটি পাইথন পরিবেশ স্থাপন করা উচিত, যা অন্যান্য আমদানি করা পাইথন প্যাকেজের সমস্যা রোধ করবে।

নিশ্চিত করো যে তোমার আছে পিআইপি, পাইথন প্যাকেজ ম্যানেজার ইনস্টল করা, যা পাইথনের সর্বাধিক আধুনিক সংস্করণগুলির সাথে আসে।

একবার আপনি যেতে প্রস্তুত হলে, আপনি SQLAlchemy প্রস্তুত করে শুরু করতে পারেন। কমান্ড লাইনে আপনার পাইথন পরিবেশের মধ্যে থেকে, এর সাথে SQLAlchemy ইনস্টল করুন পিপ ইনস্টল কমান্ড:

pip install SQLAlchemy-1.2.9

দ্য 1.2.9 সংস্করণ সংখ্যা। সর্বশেষ প্যাকেজটি পেতে আপনি এটি ছেড়ে দিতে পারেন, তবে সুনির্দিষ্ট হওয়া ভাল অনুশীলন। আপনি জানেন না কখন একটি নতুন রিলিজ আপনার বর্তমান কোড ভেঙ্গে দিতে পারে।

এখন আপনি কোডিং শুরু করার জন্য প্রস্তুত। পাইথন সংযোগ গ্রহণের জন্য আপনাকে আপনার ডাটাবেস প্রস্তুত করতে হতে পারে, কিন্তু নিচের উদাহরণগুলি একটি ব্যবহার করে এসকিউএলাইট ডাটাবেস তৈরি করা হয়েছে নিচের স্মৃতিতে।

SQLAlchemy- এ মডেল

একটি ORM এর মূল উপাদানগুলির মধ্যে একটি হল a মডেল । এটি একটি পাইথন শ্রেণী যা একটি টেবিল কেমন হওয়া উচিত এবং এটি কীভাবে কাজ করা উচিত তা তুলে ধরে। এটি এর ORM সংস্করণ ছক তৈরি কর এসকিউএল -এ বিবৃতি। আপনার ডাটাবেসের প্রতিটি টেবিলের জন্য আপনার একটি মডেল প্রয়োজন।

আপনার পছন্দের টেক্সট এডিটর বা আইডিই খুলুন এবং একটি নতুন ফাইল নামক তৈরি করুন test.py । এই স্টার্টার কোডটি লিখুন, ফাইলটি সংরক্ষণ করুন এবং এটি চালান:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('sqlite://') # Create the database in memory
Base.metadata.create_all(engine) # Create all the tables in the database

এই কোডটি বেশ কিছু কাজ করে। আমদানি করা প্রয়োজন যাতে পাইথন বুঝতে পারে যে তার প্রয়োজন SQLAlchemy মডিউল কোথায় পাওয়া যাবে। আপনার মডেলগুলি ব্যবহার করবে ঘোষণামূলক_ ভিত্তি পরে, এবং এটি প্রত্যাশা অনুযায়ী কাজ করার জন্য কোন নতুন মডেল কনফিগার করে।

দ্য create_engine পদ্ধতি আপনার ডাটাবেসের সাথে একটি নতুন সংযোগ তৈরি করে। যদি আপনার ইতিমধ্যে একটি ডাটাবেস থাকে, তাহলে আপনাকে পরিবর্তন করতে হবে sqlite: // আপনার ডাটাবেস ইউআরআইতে। যেমন আছে, এই কোডটি শুধুমাত্র মেমরিতে একটি নতুন ডাটাবেস তৈরি করবে। আপনার কোড কার্যকর করা শেষ হলে ডাটাবেস ধ্বংস হয়ে যায়।

অবশেষে, create_all পদ্ধতি আপনার ডাটাবেসে আপনার মোডে সংজ্ঞায়িত সমস্ত টেবিল তৈরি করে। যেহেতু আপনি এখনও কোন মডেল সংজ্ঞায়িত করেন নি, কিছুই হবে না। এগিয়ে যান এবং এই কোডটি চালান, নিশ্চিত করুন যে আপনার কোন সমস্যা বা টাইপো নেই।

আসুন একটি মডেল তৈরি করি। আপনার ফাইলের শীর্ষে আরেকটি আমদানি যোগ করুন:

from sqlalchemy import Column, Integer, String

এটি আমদানি করে কলাম , পূর্ণসংখ্যা , এবং স্ট্রিং SQLAlchemy থেকে মডিউল। তারা সংজ্ঞায়িত করে কিভাবে ডাটাবেস টেবিল, ক্ষেত্র, কলাম এবং ডেটা টাইপ কাজ করে।

নীচে ঘোষণামূলক_ ভিত্তি , আপনার মডেল ক্লাস তৈরি করুন:

class Cars(Base):
__tablename__ = 'cars'
id = Column(Integer, primary_key=True)
make = Column(String(50), nullable=False)
color = Column(String(50), nullable=False)

এই সাধারণ উদাহরণটি গাড়ি ব্যবহার করে, কিন্তু আপনার টেবিলে কোনো ডেটা থাকতে পারে।

প্রতিটি শ্রেণীর উত্তরাধিকারী হতে হবে ভিত্তি । আপনার ডাটাবেস টেবিলের নাম সংজ্ঞায়িত করা হয়েছে __ টেবিলের নাম__ । এটি ক্লাসের নামের মতো হওয়া উচিত, তবে এটি কেবল একটি সুপারিশ, এবং যদি সেগুলি মেলে না তবে কিছুই ভাঙবে না।

পরিশেষে, প্রতিটি কলাম ক্লাসের মধ্যে একটি পাইথন ভেরিয়েবল হিসাবে সংজ্ঞায়িত করা হয়। বিভিন্ন ধরনের ডাটা ব্যবহার করা হয়, এবং প্রাথমিক_কি বৈশিষ্ট্য SQLAlchemy তৈরি করতে বলে আইডি একটি প্রাথমিক কী হিসাবে কলাম।

এগিয়ে যান এবং একটি শেষ আমদানি যোগ করুন, এই জন্য বিদেশী চাবি মডিউল এটি আপনার সাথে যোগ করুন কলাম আমদানি:

from sqlalchemy import Column, ForeignKey, Integer, String

এখন একটি দ্বিতীয় মডেল ক্লাস তৈরি করুন। এই শ্রেণীকে বলা হয় গাড়ির মালিকদের , এবং নির্দিষ্ট গাড়ির মালিকের বিবরণ সংরক্ষণ করে গাড়ি টেবিল:

class CarOwners(Base):
__tablename__ = 'carowners'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
age = Column(Integer, nullable=False)
car_id = Column(Integer, ForeignKey('cars.id'))
car = relationship(Cars)

এখানে বেশ কিছু নতুন বৈশিষ্ট্য চালু করা হয়েছে। দ্য car_id ক্ষেত্র একটি বিদেশী কী হিসাবে সংজ্ঞায়িত করা হয়। এটি এর সাথে যুক্ত আইডি মধ্যে গাড়ি টেবিল লক্ষ্য করুন কিভাবে ছোট হাতের টেবিলের নাম ব্যবহার করা হয়, বড় হাতের শ্রেণীর নামটি ইনস্টল করা হয়।

অবশেষে, এর একটি বৈশিষ্ট্য গাড়ী একটি হিসাবে সংজ্ঞায়িত করা হয় সম্পর্ক । এটি আপনার মডেলকে অ্যাক্সেস করতে দেয় গাড়ি এই ভেরিয়েবলের মাধ্যমে টেবিল। এটি নীচে প্রদর্শিত হয়।

আপনি যদি এখন এই কোডটি চালান, আপনি দেখতে পাবেন যে কিছুই ঘটে না। এর কারণ এই যে আপনি এটিকে এখনও উল্লেখযোগ্য কিছু করতে বলেননি।

SQLAlchemy- এ বস্তু

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

ডাটা লেখা

এই উদাহরণে, আপনি এটি পড়ার আগে ডাটাবেসে কিছু তথ্য সন্নিবেশ করতে হবে। যদি আপনি একটি বিদ্যমান ডাটাবেস ব্যবহার করছেন, আপনার কাছে ইতিমধ্যেই ডেটা থাকতে পারে। যেভাবেই হোক, ডেটা কিভাবে ertোকানো যায় তা জানা এখনও খুবই দরকারী।

আপনি লেখালেখিতে অভ্যস্ত হতে পারেন সন্নিবেশ করান এসকিউএল -এ বিবৃতি। SQLAlchemy আপনার জন্য এটি পরিচালনা করে। এখানে কিভাবে একটি সারি সন্নিবেশ করানো যায় গাড়ি মডেল. এর জন্য একটি নতুন আমদানি শুরু করুন সেশনমেকার :

from sqlalchemy.orm import sessionmaker

এটি তৈরি করার জন্য প্রয়োজন সেশন এবং ডিবি সেশন বস্তু, যা ডেটা পড়তে এবং লিখতে ব্যবহৃত হয়:

DBSession = sessionmaker(bind=engine)
session = DBSession()

এখন এটি আপনার নীচে রাখুন create_all বিবৃতি:

car1 = Cars(
make='Ford',
color='silver'
)
session.add(car1)
session.commit()

আসুন সেই কোডটি ভেঙে ফেলি। পরিবর্তনশীল গাড়ী 1 এর উপর ভিত্তি করে একটি বস্তু হিসাবে সংজ্ঞায়িত করা হয় গাড়ি মডেল. এর মেক এবং কালার প্যারামিটার হিসেবে সেট করা আছে। এটি বলার মতো 'আমাকে একটি গাড়ি বানান, কিন্তু এটি এখনও ডাটাবেসে লিখবেন না'। এই গাড়িটি স্মৃতিতে বিদ্যমান কিন্তু লেখা হওয়ার অপেক্ষায় আছে।

সঙ্গে সেশনে গাড়ি যোগ করুন session.add , এবং তারপর এটি ডাটাবেসে লিখুন session.commit

এখন একটি মালিক যোগ করা যাক:

owner1 = CarOwners(
name='Joe',
age='99',
car_id=(car1.id)
)
session.add(owner1)
session.commit()

এই কোডটি পূর্ববর্তী সন্নিবেশের জন্য প্রায় অভিন্ন গাড়ি মডেল. এখানে প্রধান পার্থক্য হল car_id একটি বিদেশী কী তাই একটি সারি আইডি প্রয়োজন যা অন্য টেবিলে বিদ্যমান। এই মাধ্যমে অ্যাক্সেস করা হয় car1.id সম্পত্তি

আপনাকে ডাটাবেস জিজ্ঞাসা করতে হবে না বা কোন আইডি ফেরত দিতে হবে না, কারণ SQLAlchemy আপনার জন্য এটি পরিচালনা করে (যতক্ষণ আপনি প্রথমে ডেটা প্রতিশ্রুতি দেন)।

ডেটা পড়া

একবার আপনি কিছু তথ্য লিখে ফেললে, আপনি এটি আবার পড়তে শুরু করতে পারেন। এখানে কিভাবে প্রশ্ন করা যায় গাড়ি এবং গাড়ির মালিকদের টেবিল:

result = session.query(Cars).all()

এটা যে সহজ। ব্যবহার করে প্রশ্ন পদ্ধতিতে পাওয়া যায় সেশন , আপনি মডেলটি নির্দিষ্ট করুন, এবং তারপর ব্যবহার করুন সব সমস্ত ফলাফল পুনরুদ্ধার করার পদ্ধতি। যদি আপনি জানেন যে শুধুমাত্র একটি ফলাফল হবে, তাহলে আপনি ব্যবহার করতে পারেন প্রথম পদ্ধতি:

result = session.query(Cars).first()

একবার আপনি মডেলটি জিজ্ঞাসা করলে, এবং আপনার প্রদত্ত ফলাফলগুলি একটি ভেরিয়েবলে সংরক্ষণ করে, আপনি বস্তুর মাধ্যমে ডেটা অ্যাক্সেস করতে পারেন:

print(result[0].color)

এটি 'রূপা' রঙ ছাপায়, কারণ সেই রেকর্ডটি প্রথম সারির। আপনি চাইলে ফলাফল বস্তুর উপর লুপ করতে পারেন।

আপনি যেমন আপনার মডেলের মধ্যে সম্পর্ক সংজ্ঞায়িত করেছেন, যোগদান নির্দিষ্ট না করেই সংশ্লিষ্ট টেবিলে ডেটা অ্যাক্সেস করা সম্ভব:

result = session.query(CarOwners).all()
print(result[0].name)
print(result[0].car.color)

এটি কাজ করে কারণ আপনার মডেলটিতে আপনার টেবিল কাঠামোর বিবরণ রয়েছে এবং গাড়ী বৈশিষ্ট্যটি একটি লিঙ্ক হিসাবে সংজ্ঞায়িত করা হয়েছিল গাড়ি টেবিল

ORM গুলি সম্পর্কে কি পছন্দ করা যায় না?

এই টিউটোরিয়ালটি শুধুমাত্র খুব মূল বিষয়গুলি অন্তর্ভুক্ত করেছে, কিন্তু একবার আপনি সেগুলি বন্ধ করে দিলে, আপনি উন্নত বিষয়গুলিতে যেতে পারেন। ORM- এর কিছু সম্ভাব্য ডাউনসাইড রয়েছে:

  • কোন প্রশ্ন চালানোর আগে আপনাকে আপনার মডেল লিখতে হবে।
  • এটা শেখার আরেকটি নতুন সিনট্যাক্স।
  • সাধারণ প্রয়োজনে এটি খুব জটিল হতে পারে।
  • শুরু করার জন্য আপনার অবশ্যই একটি ভাল ডাটাবেস ডিজাইন থাকতে হবে।

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

যদি আপনি নিশ্চিত না হন যে একটি ORM আপনার জন্য সঠিক হাতিয়ার, তাহলে নিশ্চিত করুন যে আপনি এর সম্পর্কে পড়েছেন গুরুত্বপূর্ণ SQL কমান্ড প্রোগ্রামারদের জানা উচিত

শেয়ার করুন শেয়ার করুন টুইট ইমেইল আপনার কি অবিলম্বে উইন্ডোজ 11 এ আপগ্রেড করা উচিত?

উইন্ডোজ 11 শীঘ্রই আসছে, কিন্তু আপনার যত তাড়াতাড়ি সম্ভব আপডেট করা উচিত বা কয়েক সপ্তাহ অপেক্ষা করা উচিত? খুঁজে বের কর.

পরবর্তী পড়ুন
সম্পর্কিত বিষয়
  • প্রোগ্রামিং
  • পাইথন
  • এসকিউএল
  • কোডিং টিউটোরিয়াল
লেখক সম্পর্কে জো কোবার্ন(136 নিবন্ধ প্রকাশিত)

জো যুক্তরাজ্যের লিংকন বিশ্ববিদ্যালয় থেকে কম্পিউটার বিজ্ঞানে স্নাতক। তিনি একজন পেশাদার সফটওয়্যার ডেভেলপার, এবং যখন তিনি ড্রোন উড়াচ্ছেন না বা সঙ্গীত লিখছেন না, তখন তাকে প্রায়ই ফটো তুলতে বা ভিডিও তৈরি করতে দেখা যায়।

কিভাবে ল্যাপটপে গ্রাফিক্স উন্নত করা যায়
জো কোবার্ন থেকে আরো

আমাদের নিউজলেটার সদস্যতা

প্রযুক্তি টিপস, রিভিউ, ফ্রি ইবুক এবং এক্সক্লুসিভ ডিলের জন্য আমাদের নিউজলেটারে যোগ দিন!

সাবস্ক্রাইব করতে এখানে ক্লিক করুন