SQLAlchemy ORM - मैपिंग की घोषणा

SQLAlchemy के ऑब्जेक्ट रिलेशनल मैपर एपीआई का मुख्य उद्देश्य उपयोगकर्ता-परिभाषित पायथन कक्षाओं को डेटाबेस तालिकाओं के साथ, और उन वर्गों की वस्तुओं को उनके संगत तालिकाओं में पंक्तियों के साथ जोड़ना है। वस्तुओं और पंक्तियों के राज्यों में परिवर्तन एक-दूसरे के साथ समान रूप से मेल खाते हैं। SQLAlchemy उपयोगकर्ता परिभाषित वर्गों और उनके परिभाषित संबंधों के संदर्भ में डेटाबेस क्वेरी को व्यक्त करने में सक्षम बनाता है।

ORM का निर्माण SQL अभिव्यक्ति भाषा के ऊपर किया गया है। यह उपयोग का एक उच्च स्तरीय और अमूर्त पैटर्न है। वास्तव में, ORM अभिव्यक्ति भाषा का एक अनुप्रयुक्त उपयोग है।

हालाँकि, ऑब्जेक्ट रिलेशनल मैपर का उपयोग करके विशेष रूप से एक सफल एप्लिकेशन का निर्माण किया जा सकता है, कभी-कभी ओआरएम के साथ निर्मित एप्लिकेशन सीधे अभिव्यक्ति भाषा का उपयोग कर सकता है जहां विशिष्ट डेटाबेस इंटरैक्शन की आवश्यकता होती है।

मानचित्रण की घोषणा करें

सबसे पहले, create_engine () फ़ंक्शन को इंजन ऑब्जेक्ट सेट करने के लिए कहा जाता है जिसे बाद में SQL ऑपरेशन करने के लिए उपयोग किया जाता है। फ़ंक्शन के दो तर्क हैं, एक डेटाबेस का नाम है और दूसरा एक इको पैरामीटर है जब सेट टू ट्रू गतिविधि लॉग उत्पन्न करेगा। यदि यह मौजूद नहीं है, तो डेटाबेस बनाया जाएगा। निम्न उदाहरण में, एक SQLite डेटाबेस बनाया जाता है।

from sqlalchemy import create_engine
engine = create_engine('sqlite:///sales.db', echo = True)

इंजन डेटाबेस के लिए एक वास्तविक DBAPI कनेक्शन स्थापित करता है जब Engine.execute () या Engine.connect () जैसी विधि को बुलाया जाता है। इसके बाद SQLORM का उपयोग किया जाता है जो सीधे इंजन का उपयोग नहीं करता है; इसके बजाय, इसका उपयोग ORM द्वारा पर्दे के पीछे किया जाता है।

ओआरएम के मामले में, कॉन्फ़िगरेशन प्रक्रिया डेटाबेस तालिकाओं का वर्णन करके और फिर उन कक्षाओं को परिभाषित करके शुरू होती है जिन्हें उन तालिकाओं में मैप किया जाएगा। SQLAlchemy में, ये दो कार्य एक साथ किए जाते हैं। यह घोषणा प्रणाली का उपयोग करके किया जाता है; बनाई गई कक्षाओं में उनके द्वारा मैप की गई वास्तविक डेटाबेस तालिका का वर्णन करने के लिए निर्देश शामिल हैं।

एक बेस क्लास, क्लासरूम के कैटालॉग और डिक्लेरेटिव सिस्टम में मैप्ड टेबल को स्टोर करता है। इसे डिक्लेरेटिव बेस क्लास कहा जाता है। आमतौर पर आयातित मॉड्यूल में इस आधार का सिर्फ एक उदाहरण होगा। बेस क्लास बनाने के लिए घोषणात्मक_बेस () फ़ंक्शन का उपयोग किया जाता है। यह फ़ंक्शन sqlalchemy.ext.declarative मॉड्यूल में परिभाषित किया गया है।

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

एक बार बेस क्लासिस घोषित होने के बाद, किसी भी संख्या में मैप किए गए वर्गों को इसके संदर्भ में परिभाषित किया जा सकता है। निम्नलिखित कोड ग्राहक की कक्षा को परिभाषित करता है। इसमें तालिका को मैप किया जाना है, और इसमें कॉलम के नाम और डेटाटिप्स हैं।

class Customers(Base):
   __tablename__ = 'customers'
   
   id = Column(Integer, primary_key = True)
   name = Column(String)
   address = Column(String)
   email = Column(String)

घोषणा में एक वर्ग होना चाहिए एक __tablename__ विशेषता, और कम से कम एक Columnजो एक प्राथमिक कुंजी का हिस्सा है। घोषणात्मक सभी को प्रतिस्थापित करता हैColumn विशेष पायथन एक्सेसर्स वाली वस्तुएं जिन्हें जाना जाता है descriptors। इस प्रक्रिया को इंस्ट्रूमेंटेशन के रूप में जाना जाता है जो SQL संदर्भ में तालिका को संदर्भित करने का साधन प्रदान करता है और डेटाबेस से कॉलम के मूल्यों को बनाए रखने और लोड करने में सक्षम बनाता है।

सामान्य पायथन वर्ग की तरह इस मैप किए गए वर्ग में आवश्यकता के अनुसार विशेषताएँ और विधियाँ हैं।

घोषणा प्रणाली में वर्ग के बारे में जानकारी को टेबल मेटाडेटा कहा जाता है। SQLAlchemy घोषणा द्वारा बनाई गई एक विशिष्ट तालिका के लिए इस जानकारी का प्रतिनिधित्व करने के लिए टेबल ऑब्जेक्ट का उपयोग करता है। तालिका ऑब्जेक्ट विनिर्देशों के अनुसार बनाई गई है, और मैपर ऑब्जेक्ट का निर्माण करके वर्ग के साथ जुड़ा हुआ है। यह मैपर ऑब्जेक्ट सीधे उपयोग नहीं किया जाता है, लेकिन आंतरिक रूप से मैप्ड क्लास और टेबल के बीच इंटरफेस के रूप में उपयोग किया जाता है।

प्रत्येक टेबल ऑब्जेक्ट मेटाडाटा के रूप में जाना जाने वाले बड़े संग्रह का सदस्य है और यह ऑब्जेक्ट का उपयोग करके उपलब्ध है .metadataघोषणात्मक आधार वर्ग की विशेषता। MetaData.create_all()विधि है, हमारे इंजन में डेटाबेस कनेक्टिविटी के स्रोत के रूप में गुजर रहा है। अभी तक नहीं बनाई गई सभी तालिकाओं के लिए, यह डेटाबेस के लिए रचनात्मक विवरण जारी करता है।

Base.metadata.create_all(engine)

डेटाबेस और तालिका बनाने के लिए पूरी स्क्रिप्ट, और पायथन क्लास को मैप करने के लिए नीचे दिया गया है -

from sqlalchemy import Column, Integer, String
from sqlalchemy import create_engine
engine = create_engine('sqlite:///sales.db', echo = True)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class Customers(Base):
   __tablename__ = 'customers'
   id = Column(Integer, primary_key=True)

   name = Column(String)
   address = Column(String)
   email = Column(String)
Base.metadata.create_all(engine)

जब निष्पादित किया जाता है, तो SQL अभिव्यक्ति निष्पादित होने के बाद पायथन कंसोल गूंज जाएगा -

CREATE TABLE customers (
   id INTEGER NOT NULL,
   name VARCHAR,
   address VARCHAR,
   email VARCHAR,
   PRIMARY KEY (id)
)

यदि हम SQLiteStudio ग्राफिक टूल का उपयोग करके Sales.db को खोलते हैं, तो यह उपर्युक्त संरचना के साथ ग्राहकों को इसके अंदर तालिका दिखाता है।