यहाँ मेरे लिए क्या काम किया। मेरे पायथन और ओरेकल संस्करण आपके से थोड़े अलग हैं, लेकिन एक ही दृष्टिकोण लागू होना चाहिए। बस सुनिश्चित करें कि cx_Oracle बाइनरी इंस्टॉलर संस्करण आपके Oracle क्लाइंट और पायथन संस्करणों से मेल खाता है।
मेरे संस्करण:
- पायथन 2.7
- Oracle इंस्टेंट क्लाइंट 11G R2
- cx_Oracle 5.0.4 (यूनिकोड, पायथन 2.7, Oracle 11G)
- Windows XP SP3
चरण:
- ओरेकल इंस्टेंट क्लाइंट पैकेज डाउनलोड करें। मैंने इंस्टेंटक्लाइंट-बेसिक-विन32-11.2.0.1.0.zip का इस्तेमाल किया। इसे C:\your\path\to\instantclient_11_2 . पर अनज़िप करें
- cx_Oracle बाइनरी इंस्टॉलर डाउनलोड करें और चलाएं। मैंने cx_Oracle-5.0.4-11g-unicode.win32-py2.7.msi का उपयोग किया। मैंने इसे सभी उपयोगकर्ताओं के लिए स्थापित किया और इसे रजिस्ट्री में पाए गए पायथन 2.7 स्थान पर इंगित किया।
- एक बैच स्क्रिप्ट के माध्यम से ORACLE_HOME और PATH पर्यावरण चर सेट करें या जो भी तंत्र आपके ऐप के संदर्भ में समझ में आता है, ताकि वे Oracle इंस्टेंट क्लाइंट निर्देशिका को इंगित करें। नीचे oracle_python.bat स्रोत देखें। मुझे यकीन है कि इसके लिए एक और अधिक सुरुचिपूर्ण समाधान होना चाहिए, लेकिन मैं जितना संभव हो सके अपने सिस्टम-व्यापी परिवर्तनों को सीमित करना चाहता था। सुनिश्चित करें कि आपने लक्षित Oracle इंस्टेंट क्लाइंट निर्देशिका को PATH (या कम से कम किसी अन्य Oracle क्लाइंट निर्देशिका से आगे) की शुरुआत में रखा है। अभी, मैं केवल कमांड-लाइन सामान कर रहा हूं इसलिए मैं किसी भी प्रोग्राम को चलाने से पहले शेल में oracle_python.bat चलाता हूं जिसमें cx_Oracle की आवश्यकता होती है।
- regedit चलाएँ और देखें कि क्या कोई NLS_LANG कुंजी \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE पर सेट है। यदि ऐसा है, तो कुंजी का नाम बदलें (मैंने इसे NLS_LANG_OLD में बदल दिया है) या इसे अनसेट कर दें। इस कुंजी का उपयोग केवल Oracle 7 क्लाइंट के लिए डिफ़ॉल्ट NLS_LANG मान के रूप में किया जाना चाहिए, इसलिए इसे तब तक निकालना सुरक्षित है जब तक कि आप Oracle 7 क्लाइंट का कहीं और उपयोग नहीं कर रहे हों। हमेशा की तरह, परिवर्तन करने से पहले अपनी रजिस्ट्री का बैकअप अवश्य लें।
- अब, आप अपने पायथन प्रोग्राम में cx_Oracle आयात करने में सक्षम होना चाहिए। नीचे oracle_test.py स्रोत देखें। ध्यान दें कि मुझे cx_Oracle के अपने संस्करण के लिए कनेक्शन और SQL स्ट्रिंग्स को यूनिकोड में सेट करना था।
स्रोत:oracle_python.bat
@echo ऑफ़सेट ORACLE_HOME=C:\your\path\to\instantclient_11_2set PATH=%ORACLE_HOME%;%PATH%
स्रोत:oracle_test.py
आयात करें ') c में पंक्ति के लिए:प्रिंट पंक्ति [0], "-", पंक्ति [1] conn.close ()संभावित समस्याएं:
- "ORA-12705:निर्दिष्ट NLS डेटा फ़ाइलों या अमान्य वातावरण तक नहीं पहुंच सकता" - NLS_LANG रजिस्ट्री परिवर्तन करने से पहले मैं इसमें भाग गया।
- "TypeError:तर्क 1 यूनिकोड होना चाहिए, str नहीं" - यदि आपको कनेक्शन स्ट्रिंग को यूनिकोड पर सेट करने की आवश्यकता है।
- "TypeError:कोई नहीं या एक स्ट्रिंग की अपेक्षा करना" - यदि आपको SQL स्ट्रिंग को यूनिकोड पर सेट करने की आवश्यकता है।
- "आयात त्रुटि:डीएलएल लोड विफल:निर्दिष्ट प्रक्रिया नहीं मिली।" - यह संकेत दे सकता है कि cx_Oracle को उपयुक्त Oracle क्लाइंट DLL नहीं मिल रहा है।