django

2008-11-06 14 views
9

में एकाधिक डेटाबेस समर्थन मुझे कुछ पता चला कि Django में निम्न स्तर पर एकाधिक डेटाबेस समर्थन जोड़ा गया है, लेकिन उच्च स्तर एपीआई अभी तक नहीं जोड़े गए हैं।django

क्या कोई मुझे बता सकता है कि कोई Django में एकाधिक डेटाबेस कनेक्शन कैसे प्राप्त कर सकता है।

क्या किसी को भी कोई विचार है जब Django पूरी तरह से/आधिकारिक तौर पर एकाधिक डेटाबेस कनेक्शन का समर्थन करेगा।

उत्तर

4

सबसे हालिया चर्चा मैंने देखा है Proposal: user-friendly API for multi-database support डीजेंगो-डेवलपर्स थ्रेड में, जिसमें मूल संदेश में प्रबंधक का उपयोग करके एकाधिक डेटाबेस का उपयोग करने का एक तरीका भी है।

0

मुझे लगता है कि आप के लिए "कच्चे एसक्यूएल" .. थोड़े बात सहारा होगा ..
यहाँ देखो: http://docs.djangoproject.com/en/dev/topics/db/sql/

आप अपने अन्य डेटाबेस, के लिए एक "कनेक्शन" की जरूरत है अगर आप django/db/__init__.py में चारों ओर देख लाइन 39 (मेरी संस्करण में ..)

connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS)

वहाँ से ले करने के लिए कोशिश ..
पी एस मैंने वास्तव में इस या कुछ भी कोशिश नहीं की है .. बस मुझे लगता है कि आपकी समस्या को हल करने की सामान्य दिशा में इंगित करने की कोशिश कर रहा है।

3

आप कई (कई) Django-देव में इस विषय पर सूत्र के कुछ पढ़ा है, तो आप उस क्या सीधा लग रहा है, नहीं है देखेंगे। यदि आप एक एकल उपयोग केस चुनते हैं, तो यह आसान लग रहा है, लेकिन जैसे ही आप किसी भी तरह से सामान्यीकरण करना शुरू करते हैं, आप परेशानी में भागना शुरू करते हैं।

उदाहरण के रूप में उपर्युक्त संदर्भित थ्रेड का उपयोग करने के लिए, जब आप "एकाधिक डेटाबेस" कहते हैं, तो आप निम्न में से किस बारे में बात कर रहे हैं?

  • उसी इंजन पर एक ही मशीन पर सभी डीबी।
  • एक ही मशीन पर सभी डीबी, विभिन्न इंजन (उदा। MySQL + PostgreSQL)
  • एन मास्टर डीबी विभिन्न मशीनों पर एन पढ़ने-केवल गुलामों के साथ।
  • एकाधिक डीबी सर्वरों में तालिकाओं की शेडिंग।

आप की आवश्यकता होगी: डीबीएस भर

  • विदेशी कुंजी
  • एक चालाक के साथ मशीनों के लिए मिलती है और/या इंजन
  • आदि आदि

समस्याओं में से एक डीजेंगो की तरह ओआरएम यह है कि यह उन सभी गन्दा विवरणों को एक अच्छी पेंट जॉब के नीचे छुपाता है। ऐसा करने के लिए, लेकिन फिर उपरोक्त में से किसी एक में जोड़ने के लिए, आसान नहीं है (टीएम)।

+0

मुझे समझ नहीं कि यह वास्तव में एक जटिल काम है करने के लिए। लेकिन फिर एप्लिकेशन को बड़े होने के बाद, डीजेंगो का उपयोग केवल सरल वेब अनुप्रयोगों के लिए किया जा सकता है, यह एकाधिक डेटाबेस सर्वर (शेरिंग) में डेटा को विभाजित करना अनिवार्य हो जाता है। डेवलपर ऐसे मामलों को कैसे संभालता है? – codebreak

+0

सभी एकाधिक डेटाबेस मुद्दों में, शेरिंग सबसे अधिक एप्लिकेशन विशिष्ट हो सकती है, और इसलिए सामान्य समाधान के लिए सबसे कठिन उत्पादन करना मुश्किल होता है। क्या आप किसी भी ओआरएम के बारे में जानते हैं जिसके पास इस समस्या का सामान्य समाधान है? –

2

एरिक फ्लोरेंजोनो ने एक बहुत अच्छा ब्लॉग पोस्ट लिखा है जो आपको Easy MultipleDatabase Support for Django पर कुछ डेटाबेस समर्थन की अनुमति देता है।

यह एक नया कस्टम मैनेजर बनाकर शुरू होता है जो आपको डेटाबेस सेटिंग्स निर्दिष्ट करने की अनुमति देता है।

+0

एरिक के उदाहरण के अनुसार वैश्विक सेटिंग्स ऑब्जेक्ट को संशोधित करना एक थ्रेडसेफ चीज़ नहीं है। ऐसा लगता है कि सेटिंग्स को पारित करने की अनुमति देने के लिए निम्न-स्तर कनेक्शन API बदल गया है, जो इसे थ्रेडसेफ बना देगा। –

0

एरिक फ्लोरेंजो का दृष्टिकोण अच्छी तरह से काम करता है यदि आपके सभी डेटाबेस एक ही इंजन का उपयोग करते हैं। यदि आपके पास अलग-अलग इंजन हैं (मेरे मामले में पोस्टग्रेस और एमएसएसक्यूएल) तो आप ओआरएम कोड में गहरे कई मुद्दों में भाग लेंगे (जैसे मॉडल/एसक्यूएल/डीटीटीवी डिफ़ॉल्ट कनेक्शन के एसक्यूएल सिंटैक्स का उपयोग कर)।

आप इस काम करने की जरूरत है, तो आप एलेक्स Gaynor के MultiDB परियोजना है जिसके लिए Django 1.2

9

की योजना बनाई है तो आप बस कई कनेक्शन की जरूरत है के लिए इंतजार करना चाहिए, तो आप कुछ इस तरह कर सकते हैं:

from django.db import load_backend 
myBackend = load_backend('postgresql_psycopg2') # or 'mysql', 'sqlite3', 'oracle' 
myConnection = myBackend.DatabaseWrapper({ 
    'DATABASE_HOST': '192.168.1.1', 
    'DATABASE_NAME': 'my_database', 
    'DATABASE_OPTIONS': {}, 
    'DATABASE_PASSWORD': "", 
    'DATABASE_PORT': "", 
    'DATABASE_USER': "my_user", 
    'TIME_ZONE': "America/New_York",}) 
# Now we can do all the standard raw sql stuff with myConnection. 
myCursor = myConnection.cursor() 
myCursor.execute("SELECT COUNT(1) FROM my_table;") 
myCursor.fetchone() 
+1

इस पर उपरोक्त है जो मैं खोज रहा था जब मुझे Google पर यह जवाब मिला –

1

एकाधिक डेटाबेस से

हम हमेशा एक की जरूरत है चुनने के लिए डिफ़ॉल्ट नाम दिया गया है, बाकी के नाम आप पर निर्भर हैं।

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'mupltiple_datab_app1',      
     'USER': 'root',      
     'PASSWORD': 'admin',     
     'HOST': "",      
     'PORT': "",      
    }, 
    'user1':{ 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'mupltiple_datab_app2',      
     'USER': 'root',      
     'PASSWORD': 'admin',     
     'HOST': "",       
     'PORT': "", 

    }, 
    'user2':{ 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'mupltiple_datab_app3',      
     'USER': 'root',      
     'PASSWORD': 'admin',     
     'HOST':"" ,      
     'PORT': "" , 

    } 
} 
सिंक के लिए

एक विशेष डेटाबेस

manage.py syncdb --database=user1 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^