अनुप्रयोगों को अक्सर अन्य सेवाओं (डेटाबेस, एक कैश, एक एपीआई, आदि) से कनेक्ट करने की आवश्यकता होती है। स्वच्छता और डीआरवाई के लिए, हम इन सभी कनेक्शनों को एक मॉड्यूल में रखना चाहते हैं ताकि हमारे शेष कोड बेस कनेक्शन साझा कर सकें।पायथन में कनेक्शन निर्माण का प्रबंधन?
बॉयलरप्लेट कम करने के लिए नीचे की ओर उपयोग आसान होना चाहिए:
# app/do_stuff.py
from .connections import AwesomeDB
db = AwesomeDB()
def get_stuff():
return db.get('stuff')
और कनेक्शन की स्थापना भी आसान होना चाहिए:
Django और बोतल की तरह# app/cli.py or some other main entry point
from .connections import AwesomeDB
db = AwesomeDB()
db.init(username='stuff admin') # Or os.environ['DB_USER']
वेब चौखटे कुछ इस तरह करते हैं, लेकिन यह थोड़ा उलझन में महसूस करता है:
Connect to a Database in Flask, Which Approach is better? http://flask.pocoo.org/docs/0.10/tutorial/dbcon/
इसके साथ एक बड़ा मुद्दा यह है कि हम प्रॉक्सी के बजाय वास्तविक कनेक्शन ऑब्जेक्ट का संदर्भ चाहते हैं, क्योंकि हम iPython और अन्य देव वातावरण में टैब-पूर्णता को बनाए रखना चाहते हैं।
तो ऐसा करने का सही तरीका (टीएम) क्या है? कोई नहीं के बजाय एक सामान्य ConnectionProxy है, जो सभी विशेषता पहुँच फैल जाती है और एक अपवाद फेंकता है पर सेट करें प्रारंभिक __connection: सुधार के लिए
#app/connections.py
from awesome_database import AwesomeDB as RealAwesomeDB
from horrible_database import HorribleDB as RealHorribleDB
class ConnectionMixin(object):
__connection = None
def __new__(cls):
cls.__connection = cls.__connection or object.__new__(cls)
return cls.__connection
def __init__(self, real=False, **kwargs):
if real:
super().__init__(**kwargs)
def init(self, **kwargs):
kwargs['real'] = True
self.__init__(**kwargs)
class AwesomeDB(ConnectionMixin, RealAwesomeDB):
pass
class HorribleDB(ConnectionMixin, RealHorribleDB):
pass
कक्ष: कुछ पुनरावृत्तियों के बाद, यहाँ मेरा विचार है।
मैंने एसओ और विभिन्न ओएसएस परियोजनाओं में यहां चारों ओर घूमते हुए काफी कुछ किया है और इस तरह कुछ भी नहीं देखा है। यह बहुत ठोस लगता है, हालांकि इसका मतलब है कि मॉड्यूल का एक समूह आयात वस्तुओं पर साइड इफेक्ट के रूप में कनेक्शन ऑब्जेक्ट्स को तुरंत चालू करेगा। क्या यह मेरे चेहरे पर उड़ाएगा? क्या इस दृष्टिकोण के लिए कोई अन्य नकारात्मक परिणाम हैं?
पूरी तरह से उत्तर के लिए धन्यवाद! मैंने वास्तव में थ्रेड और कांटा सुरक्षा नहीं माना था, मैं निश्चित रूप से इसके बारे में सोचूंगा। पुन: कनेक्शन पैरामीटर बग, अच्छी पकड़ और अच्छा फिक्स। पुन: क्लाइंट पूल, एक अच्छा बिंदु, लेकिन कनेक्शन पूल के साथ भी, आप प्रारंभिककरण को केंद्रीकृत करना चाहते हैं और गारंटी देते हैं कि आप पूरे पूल में उसी पूल का उपयोग कर रहे हैं। – knite
पुन: सरल सहायक समारोह, मैंने मूल रूप से इस दृष्टिकोण को माना। Awesome_db * और * इसे कॉल करने की आवश्यकता वाले प्रत्येक मॉड्यूल के कारण यह जल्दी से परेशान हो जाता है। – knite