2010-11-11 9 views
8

के माध्यम से SQL सर्वर से कनेक्ट करने में असमर्थ मैं एक स्थानीय सर्वर पर * nix सिस्टम से pymssql के माध्यम से Windows XP सिस्टम पर चल रहे SQL सर्वर से कनेक्ट करने का प्रयास कर रहा हूं। हालांकि, कनेक्शन के रूप में नीचेpymssql

db = pymssql.connect(host='192.168.1.102',user='www',password='test',database='TestDB') 
Traceback (most recent call last): 

File "<stdin>", line 1, in <module> 
File "pymssql.pyx", line 457, in pymssql.connect (pymssql.c:6041) 
raise InterfaceError(e[0]) 
pymssql.InterfaceError: Connection to the database failed for an unknown reason. 

हालात से पता चला विफल रहता है मैं कोशिश की है:

  1. सेट एसक्यूएल सर्वर और ब्राउज़र नेटवर्क सर्वर के रूप में चलाने के लिए।
  2. उपयोगकर्ता को 'www' सेट अप करें। मैंने एसक्यूएल स्टूडियो में स्थानीय रूप से इस उपयोगकर्ता का भी परीक्षण किया।
  3. विंडोज फ़ायरवॉल बंद कर दिया (अस्थायी रूप से)।

मुझे कुछ याद आ रहा है - मुझे नहीं पता कि यह क्या है। मैंने विंडोज़ के सभी अनंत मेनू विकल्पों का कोई फायदा नहीं लिया। एक बात मैंने देखी है कि यदि विंडोज फ़ायरवॉल चालू है (मैं SQL सर्वर के लिए अपवाद स्थापित करता हूं) पायथन लंबे समय तक रुकता है और फिर त्रुटि देता है। अगर फ़ायरवॉल बंद है तो त्रुटि तुरंत है।

क्या कोई लॉग इन है जो मैं SQL सर्वर में देख सकता हूं?

+0

निम्न स्तर के डिबगिंग उपयोग wireshark के लिए। –

+0

धन्यवाद! मैं wireshark भाग गया और यह कुछ डेटा प्रदान किया - यह एक सरल "एक" दिखाई देता है। हालांकि ऐसा करने के लिए बहुत कुछ प्रतीत नहीं होता है। जानकारी कहती है "एमएस-एसक्यूएल-एस> 50051 [आरएसटी, एसीके] सेक = 1 एएसी = 1 विन = 0 लेन = 0। – Christopher

+0

मुझे और विवरण दिखाई देता है।" विशेषज्ञ जानकारी "कहता है" कनेक्शन रीसेट (आरएसटी) "- सुनिश्चित नहीं है क्यों। – Christopher

उत्तर

11

समझ गया! मुझे लगता है कि समस्या का स्रोत मुफ्त टीडीएस को ध्यान देने की जरूरत नहीं दे रहा था। नि: शुल्क टीडीएस स्पष्ट रूप से pymssql के पीछे चालक है और अन्य डेटाबेस से कनेक्टिविटी प्रदान करता है - SQL सर्वर उनमें से एक है।

freetds.conf फ़ाइल मेरे सिस्टम (मैक बुक प्रो) पर/usr/local/etc में स्थित है।

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

[SomeDB] 
    host = 192.168.1.102 
    port = 1219 
    tds version = 7.0 

हालांकि, क्या puzzling है मैं 1219. करने के लिए पोर्ट सेट कि मैं इसे एसक्यूएल स्टूडियो में 1433 के लिए मैन्युअल रूप से सेट किया था है:

वैसे भी, यहाँ मैं क्या freetds.conf के साथ जोड़ दिया का एक उदाहरण है । इसके अलावा, मैं टीडीएस संस्करण 0.82 उपयोग कर रहा हूँ तो मैं नहीं जानता कि कैसे में

अगला 7.0 फिट, मैं इस प्रकार 'TSQL' का उपयोग कर कनेक्टिविटी का परीक्षण किया:।

tsql -S SomeDB -U www 

मैं पासवर्ड दर्ज करें और एक आदेश प्राप्त लाइन जो SQL क्वेरी के लिए अनुमति देता है।

इसके बाद, मैं pymssql का उपयोग कर के रूप में इस जोड़ने का परीक्षण किया:

db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB') 

आप देख सकते हैं, मैं और freetds.conf फ़ाइल से होस्ट नाम का उपयोग करने के लिए आवश्यक नहीं आईपी सीधे। मैंने फिर बीमा के लिए अतिरिक्त पायथन कोड के साथ एक साधारण क्वेरी का परीक्षण किया जिसे मैं डेटाबेस से पढ़ सकता था।

मुझे उम्मीद है कि यह भविष्य में किसी और की मदद करेगा।

+0

मुझे लगता है कि मेरे विंडोज ओएस पर freetds.conf नहीं है। मुझे कनेक्शन स्ट्रिंग के साथ यह वही त्रुटि मिल रही है: 'होस्ट = 10.43.32.211: 1433, डेटाबेस = v000001, विश्वसनीय = सही' – IAbstract

+0

ओह, शायद 'pymssql' कनेक्शन स्ट्रिंग का उपयोग नहीं करता है लेकिन नाम पैराम्स (कुछ अन्य पुस्तकालयों के विपरीत वहाँ) ... थोड़ा अजीब, लेकिन ठीक है। – IAbstract

0

क्या यह एक विंडोज मशीन है जिस पर आप काम कर रहे हैं? पोर्ट 1433 निर्दिष्ट करें। यह mssql क्लाइंट एपीआई में एक बग प्रतीत होता है, जो टीसीपी/आईपी के बजाय नामांकितपिप का उपयोग करने का प्रयास करता है।

+0

धन्यवाद! ऐसा प्रतीत होता है कि मुझे विशेष रूप से बंदरगाह 1433 निर्दिष्ट करने की आवश्यकता है। वायरशर्क बंदरगाह के बिना कुछ और प्रतिक्रिया दिखाता है। बंदरगाह के साथ "एमएस-एसक्यूएल-एस" दिखाता है। – Christopher

2

ऐसा लगता है कि आपको यह हल हो गया है, लेकिन Google से किसी और के लिए यहां पर भूमि है: यह सुनिश्चित करने के लिए जांचें कि आपके एमएस एसक्यूएल सर्वर पर मिश्रित मोड प्रमाणीकरण चालू है।यह केवल विंडोज प्रमाणीकरण की अनुमति देने के लिए डिफ़ॉल्ट है, और इससे pymssql में यह त्रुटि उत्पन्न होगी।