पाइथन और ऑब्जेक्ट-रिलेशनल मैप्स के बारे में आपको जो कुछ पता होना चाहिए

पाइथन और ऑब्जेक्ट-रिलेशनल मैप्स के बारे में आपको जो कुछ पता होना चाहिए

आपने ऑब्जेक्ट-रिलेशनल मैपिंग (ओआरएम) के बारे में सुना होगा। आपने एक का उपयोग भी किया होगा, लेकिन वे वास्तव में क्या हैं? और आप उन्हें पायथन में कैसे उपयोग करते हैं?





यहां आपको ओआरएम और पायथन के बारे में जानने की जरूरत है।





एक ओआरएम क्या है?

ऑब्जेक्ट-रिलेशनल मैपिंग (ओआरएम) एक प्रोग्रामिंग तकनीक है जिसका उपयोग डेटाबेस तक पहुंचने के लिए किया जाता है। यह आपके डेटाबेस को वस्तुओं की एक श्रृंखला में उजागर करता है। डेटा डालने या पुनर्प्राप्त करने के लिए आपको SQL कमांड लिखने की आवश्यकता नहीं है, आप ऑब्जेक्ट्स से जुड़ी विशेषताओं और विधियों की एक श्रृंखला का उपयोग करते हैं।





यह जटिल और अनावश्यक लग सकता है, लेकिन वे आपका बहुत समय बचा सकते हैं, और आपके डेटाबेस तक पहुंच को नियंत्रित करने में मदद कर सकते हैं।

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



ओआरएम का उपयोग करके, आप यह सुनिश्चित करने के लिए कोड लिख सकते हैं कि जब भी और जहां भी आपके डेटाबेस में कोई पंक्ति या फ़ील्ड एक्सेस किया जाता है, तो आपका अन्य कस्टम कोड पहले निष्पादित किया जाता है।

यह 'सत्य के एकल स्रोत' के रूप में भी कार्य करता है। यदि आप एक कस्टम गणना बदलना चाहते हैं, तो आपको इसे केवल एक ही स्थान पर बदलना होगा, कई नहीं। इनमें से कई सिद्धांतों का पालन करना संभव है पायथन में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP) , लेकिन ओआरएम डेटाबेस तक पहुंच को नियंत्रित करने के लिए ओओपी सिद्धांतों के साथ मिलकर काम करते हैं।





ओआरएम का उपयोग करते समय देखने के लिए कुछ चीजें हैं, और ऐसी परिस्थितियां हैं जहां आप एक का उपयोग नहीं करना चाहते हैं, लेकिन आम तौर पर उन्हें एक अच्छी चीज माना जाता है, खासकर बड़े कोडबेस में।

पायथन में ओआरएम SQLAlchemy का उपयोग कर रहे हैं

पायथन में कई कार्यों की तरह, खुद को लिखने की तुलना में मॉड्यूल को आयात करना तेज और आसान है। बेशक, अपना खुद का ओआरएम लिखना संभव है, लेकिन पहिया को फिर से क्यों शुरू करें?





निम्नलिखित उदाहरण सभी का उपयोग करते हैं एसक्यूएलकीमिया , एक लोकप्रिय पायथन ओआरएम, लेकिन कार्यान्वयन की परवाह किए बिना कई सिद्धांत लागू होते हैं।

SQLAlchemy के लिए पायथन की स्थापना

सही में कूदने से पहले, आपको SQLAlchemy के साथ पायथन विकास के लिए अपनी मशीन को सेटअप करने की आवश्यकता होगी।

इन उदाहरणों के साथ अनुसरण करने के लिए आपको पायथन 3.6 का उपयोग करना होगा। जबकि पुराने संस्करण काम करेंगे, नीचे दिए गए कोड को चलने से पहले कुछ संशोधन की आवश्यकता होगी। मतभेदों पर यकीन नहीं है? हमारे पायथन एफएक्यू में सभी अंतर शामिल हैं।

कोडिंग से पहले, आपको एक पायथन वातावरण स्थापित करना चाहिए, जो अन्य आयातित पायथन पैकेजों के साथ समस्याओं को रोकेगा।

आप सुनिश्चित करें कि आपके पास पीआईपी, पायथन पैकेज मैनेजर स्थापित है, जो पायथन के अधिकांश आधुनिक संस्करणों के साथ आता है।

एक बार जब आप जाने के लिए तैयार हों, तो आप SQLAlchemy तैयार करके शुरू कर सकते हैं। कमांड लाइन में अपने पायथन वातावरण के भीतर से, SQLAlchemy को स्थापित करें पाइप इंस्टाल आदेश:

pip install SQLAlchemy-1.2.9

NS 1.2.9 संस्करण संख्या है। नवीनतम पैकेज प्राप्त करने के लिए आप इसे छोड़ सकते हैं, लेकिन विशिष्ट होना अच्छा अभ्यास है। आप नहीं जानते कि कब कोई नई रिलीज़ आपके वर्तमान कोड को तोड़ सकती है।

अब आप कोडिंग शुरू करने के लिए तैयार हैं। आपको पायथन कनेक्शन स्वीकार करने के लिए अपना डेटाबेस तैयार करने की आवश्यकता हो सकती है, लेकिन निम्नलिखित उदाहरण सभी का उपयोग करते हैं: SQLite नीचे स्मृति में बनाया गया डेटाबेस।

SQLAlchemy में मॉडल

ORM के प्रमुख घटकों में से एक है a आदर्श . यह एक पायथन वर्ग है जो बताता है कि एक तालिका कैसी दिखनी चाहिए, और इसे कैसे काम करना चाहिए। यह ओआरएम संस्करण है तालिका बनाएं एसक्यूएल में बयान। आपको अपने डेटाबेस में प्रत्येक तालिका के लिए एक मॉडल की आवश्यकता है।

अपना पसंदीदा टेक्स्ट एडिटर या आईडीई खोलें, और एक नई फाइल बनाएं जिसका नाम है 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 मॉड्यूल को कहां खोजना है। आपके मॉडल का उपयोग करेंगे घोषणात्मक_आधार बाद में, और यह उम्मीद के मुताबिक काम करने के लिए किसी भी नए मॉडल को कॉन्फ़िगर करता है।

NS create_engine विधि आपके डेटाबेस के लिए एक नया कनेक्शन बनाती है। यदि आपके पास पहले से डेटाबेस है, तो आपको बदलना होगा स्क्लाइट: // अपने डेटाबेस यूआरआई के लिए। वैसे भी, यह कोड केवल मेमोरी में एक नया डेटाबेस बनाएगा। एक बार जब आपका कोड निष्पादित हो जाता है तो डेटाबेस नष्ट हो जाता है।

अंततः 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)

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

अंत में, की एक विशेषता कार एक के रूप में परिभाषित किया गया है संबंध . यह आपके मॉडल को एक्सेस करने की अनुमति देता है कारों इस चर के माध्यम से तालिका। यह नीचे दिखाया गया है।

यदि आप इस कोड को अभी चलाते हैं, तो आप देखेंगे कि कुछ नहीं होता। ऐसा इसलिए है क्योंकि आपने इसे अभी तक कुछ भी ध्यान देने योग्य करने के लिए नहीं कहा है।

SQLAlchemy में ऑब्जेक्ट

अब जब आपके मॉडल बन गए हैं, तो आप वस्तुओं तक पहुंचना शुरू कर सकते हैं, और डेटा पढ़ और लिख सकते हैं। अपने तर्क को अपनी कक्षा और फ़ाइल में रखना एक अच्छा विचार है, लेकिन अभी के लिए, यह मॉडलों के साथ रह सकता है।

डेटा लिखना

इस उदाहरण में, आपको इसे पढ़ने से पहले डेटाबेस में कुछ डेटा डालने की आवश्यकता है। यदि आप किसी मौजूदा डेटाबेस का उपयोग कर रहे हैं, तो आपके पास पहले से ही डेटा हो सकता है। किसी भी तरह से, यह जानना अभी भी बहुत उपयोगी है कि डेटा कैसे सम्मिलित किया जाए।

आपको लिखने की आदत हो सकती है सम्मिलित करें एसक्यूएल में बयान। 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 के आधार पर एक वस्तु के रूप में परिभाषित किया गया है कारों आदर्श। इसके मेक और कलर को पैरामीटर के रूप में सेट किया गया है। यह कहने जैसा है 'मुझे एक कार बनाओ, लेकिन इसे अभी तक डेटाबेस में मत लिखो'। यह कार स्मृति में मौजूद है लेकिन लिखे जाने की प्रतीक्षा कर रही है।

सत्र में कार जोड़ें सत्र.जोड़ें , और फिर इसे डेटाबेस में लिखें सत्र.प्रतिबद्ध .

आइए अब एक स्वामी जोड़ें:

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

यह कोड पिछले इंसर्ट के लगभग समान है कारों आदर्श। यहाँ मुख्य अंतर यह है कि कार_आईडी एक विदेशी कुंजी है इसलिए दूसरी तालिका में मौजूद एक पंक्ति आईडी की आवश्यकता है। यह के माध्यम से पहुँचा जाता है 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 आपके लिए सही उपकरण है, तो सुनिश्चित करें कि आपने इसके बारे में पढ़ा है महत्वपूर्ण SQL कमांड प्रोग्रामर को पता होना चाहिए .

साझा करना साझा करना कलरव ईमेल क्या आपको तुरंत विंडोज 11 में अपग्रेड करना चाहिए?

विंडोज 11 जल्द ही आ रहा है, लेकिन क्या आपको जल्द से जल्द अपडेट करना चाहिए या कुछ हफ्ते इंतजार करना चाहिए? चलो पता करते हैं।

आगे पढ़िए
संबंधित विषय
  • प्रोग्रामिंग
  • अजगर
  • एसक्यूएल
  • कोडिंग ट्यूटोरियल
लेखक के बारे में जो कोबर्न(136 लेख प्रकाशित)

जो ब्रिटेन के लिंकन विश्वविद्यालय से कंप्यूटर विज्ञान में स्नातक हैं। वह एक पेशेवर सॉफ्टवेयर डेवलपर है, और जब वह ड्रोन नहीं उड़ा रहा है या संगीत नहीं लिख रहा है, तो उसे अक्सर तस्वीरें लेते या वीडियो बनाते हुए पाया जा सकता है।

एंड्रॉइड पर इमेज सर्च को रिवर्स कैसे करें
जो कोबर्न . की अन्य फ़िल्में-टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें