2010-04-10 11 views
6

इस प्रकार Django के साथ मेरा अधिकांश अनुभव अब तक MySQL और mysqldb के साथ रहा है। एक नए ऐप के लिए मैं लिख रहा हूं, मैं पोस्टग्रेएसक्यूएल पानी में अपने पैर की अंगुली को डुबो रहा हूं, अब मेरे पास seen the light है।MySQL से PostgreSQL में जाने पर Django उपयोगकर्ता को क्या पता होना चाहिए?

डेटा आयात स्क्रिप्ट लिखते समय, मैंने डिफ़ॉल्ट ऑटोकॉमिट व्यवहार के साथ किसी समस्या पर ठोकर खाई। मुझे लगता है कि अन्य "गॉथचास" हैं जो फसल हो सकती हैं। लुकआउट पर मुझे और क्या होना चाहिए?

+0

इस पूछने के लिए धन्यवाद - मैं PostgreSQL में जाने पर विचार किया गया था और इनमें से किसी भी भर में भी आ सकते थे लेकिन नहीं जाना जाता है कि वे क्या कर रहे थे। –

उत्तर

11

Django के autocommit और डिफ़ॉल्ट PostgreSQL प्रतिबद्ध मोड के बीच एक असंगतता है।

बॉक्स के बाहर, Django डिफ़ॉल्ट PostgreSQL मोड "पढ़ा गया" का उपयोग करता है जो सभी परिचालनों को एक ही लेनदेन में जोड़ता है जो तब समाप्त होता है जब डीबी कर्सर गुंजाइश से बाहर हो जाता है। समस्या उत्पन्न होती है जब ऑपरेशन की उस श्रृंखला के दौरान कोई त्रुटि होती है। पोस्टग्रेस आपको जारी रखने से पहले रोलबैक जारी करने की अपेक्षा करता है, और यदि आप नहीं करते हैं, तो अगली बार कनेक्शन का उपयोग करने के लिए psycopg2 एक आंतरिक त्रुटि फेंकता है। यदि आप Django autocommit (डिफ़ॉल्ट) पर भरोसा कर रहे हैं, तो आप शायद रोलबैक ठीक से नहीं जा रहे हैं।

सौभाग्य से, psycopg2 को "ऑटोोकॉमिट" नामक ऑपरेशन के दूसरे मोड के लिए समर्थन है जिसमें यह इन लेन-देन को सेट नहीं करता है। MySQL (या दोनों का समर्थन करने की कोशिश कर रहे) से आने वाले लोगों के लिए, यह दुनिया को कुछ स्वच्छता लाता है। 1.1 में उन्होंने इसे बेनकाब करने के लिए समर्थन जोड़ा। अपनी सेटिंग्स के निम्नलिखित जोड़े

DATABASE_OPTIONS = { 
    "autocommit": True, 
} 

Django टिकट #3460 के लिए चर्चा बाहर देता है किरकिरा विवरण (यदि आप ट्रंक पर हैं 1.2 syntax के लिए बदलने की आवश्यकता)।


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

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