मेरे पास मेरे ब्लॉग पर इसे कैसे करना है इसका एक उदाहरण http://techspot.zzzeek.org/2012/01/11/django-style-database-routers-in-sqlalchemy/ . मूल रूप से आप सत्र को बढ़ा सकते हैं ताकि यह क्वेरी-दर-क्वेरी आधार पर मास्टर या दास से चुन सके। उस दृष्टिकोण के साथ एक संभावित गड़बड़ यह है कि यदि आपके पास एक लेनदेन है जो छह प्रश्नों को बुलाता है, तो आप एक अनुरोध में दोनों दासों का उपयोग कर सकते हैं .... लेकिन वहां हम केवल Django की सुविधा की नकल करने की कोशिश कर रहे हैं :)
थोड़ा कम जादू का दृष्टिकोण जो उपयोग के दायरे को और अधिक स्पष्ट रूप से स्थापित करता है, जो मैंने उपयोग किया है, दृश्य कॉलेबल्स पर एक डेकोरेटर है (जो कुछ भी उन्हें फ्लास्क में कहा जाता है), इस तरह:
@with_slave
def my_view(...):
# ...
with_slave ऐसा कुछ करेगा, यह मानते हुए कि आपके पास एक सत्र है और कुछ इंजन स्थापित हैं:
master = create_engine("some DB")
slave = create_engine("some other DB")
Session = scoped_session(sessionmaker(bind=master))
def with_slave(fn):
def go(*arg, **kw):
s = Session(bind=slave)
return fn(*arg, **kw)
return go
विचार यह है कि Session(bind=slave)
. को कॉल करना वर्तमान थ्रेड के लिए वास्तविक सत्र ऑब्जेक्ट प्राप्त करने के लिए रजिस्ट्री को आमंत्रित करता है, अगर यह अस्तित्व में नहीं है तो इसे बनाना - हालांकि चूंकि हम एक तर्क पारित कर रहे हैं, scoped_session यह दावा करेगा कि हम यहां जो सत्र बना रहे हैं वह निश्चित रूप से बिल्कुल नया है।पी>
आप इसे बाद के सभी SQL के लिए "गुलाम" पर इंगित करते हैं। फिर, जब अनुरोध समाप्त हो जाता है, तो आप सुनिश्चित करेंगे कि आपका फ्लास्क ऐप Session.remove()
को कॉल कर रहा है। उस थ्रेड के लिए रजिस्ट्री को साफ़ करने के लिए। जब रजिस्ट्री का अगली बार उसी थ्रेड पर उपयोग किया जाता है, तो यह "मास्टर" से जुड़ा एक नया सत्र होगा।
या एक प्रकार, आप केवल उस कॉल के लिए "दास" का उपयोग करना चाहते हैं, यह "सुरक्षित" है कि यह किसी भी मौजूदा बाइंड को सत्र में वापस पुनर्स्थापित करता है:
def with_slave(fn):
def go(*arg, **kw):
s = Session()
oldbind = s.bind
s.bind = slave
try:
return fn(*arg, **kw)
finally:
s.bind = oldbind
return go
इन सज्जाकारों में से प्रत्येक के लिए आप चीजों को उलट सकते हैं, सत्र को "गुलाम" के लिए बाध्य किया जा सकता है जहां सजावटी इसे लिखने के संचालन के लिए "मास्टर" पर रखता है। यदि आप उस मामले में एक यादृच्छिक दास चाहते थे, यदि फ्लास्क में किसी प्रकार की "अनुरोध शुरू" घटना थी, तो आप इसे उस बिंदु पर सेट कर सकते थे।