2013-04-01 8 views
8

का उपयोग कर SQL सर्वर 2012 से कनेक्ट करना मैं Python 3.3 (Windows 7-64-bit) पर SQLAlchemy (pyodbc के साथ) का उपयोग कर SQL सर्वर 2012 डेटाबेस से कनेक्ट करने का प्रयास कर रहा हूं। मैं सीधे pyodbc का उपयोग कर कनेक्ट करने में सक्षम हूं लेकिन SQLAlchemy का उपयोग कर कनेक्ट करने में असफल रहा हूं। मेरे पास डेटाबेस पहुंच के लिए डीएसएन फ़ाइल सेटअप है।एसक्यूएलकेमी और पायडबैक

मैं सफलतापूर्वक इस तरह सीधे pyodbc का उपयोग कर कनेक्ट: SQLAlchemy के लिए

con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn') 

मैं कोशिश की है:

import sqlalchemy as sa 
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname') 

create_engine विधि वास्तव में कनेक्शन सेट नहीं करता है और सफल होता है, लेकिन IIF मैं कुछ ऐसा करने की कोशिश करता हूं जो वास्तव में कनेक्शन स्थापित करने के लिए sqlalchemy का कारण बनता है (जैसे engine.table_names()), इसमें कुछ समय लगता है लेकिन फिर यह त्रुटि देता है:

DBAPIError: (Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)') None None

मुझे यकीन नहीं है कि कहां गलत हो रही है, यह देखने के लिए कि कौन सी कनेक्शन स्ट्रिंग वास्तव में sqlalchemy द्वारा pyodbc को पास की जा रही है। मैंने सफलतापूर्वक SQLite और MySQL के साथ एक ही sqlalchemy कक्षाओं का उपयोग किया है।

अग्रिम धन्यवाद!

उत्तर

21

फ़ाइल-आधारित डीएसएन स्ट्रिंग का अर्थ एसक्यूएलकेमी द्वारा सर्वर नाम = c, डेटाबेस नाम = users के रूप में किया जा रहा है।

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

यह सिंटेक्स के उपयोग से काम करता है विंडोज प्रमाणीकरण:

engine = sa.create_engine('mssql+pyodbc://server/database') 

या एसक्यूएल प्रमाणीकरण के साथ:

engine = sa.create_engine('mssql+pyodbc://user:[email protected]/database') 

SQLAlchemy अलग कनेक्शन स्ट्रिंग विकल्पों here का पूरी तरह से व्याख्या है।

+2

धन्यवाद। SQL सर्वर इंस्टेंस एकमात्र ऐसा है जो मशीन पर नहीं है जिस पर मैं काम कर रहा हूं इसलिए मुझे यकीन नहीं था कि यहां कुछ मजाकिया चल रहा है या नहीं। बस सूचीबद्ध स्टिंग्स पर थोड़ा विस्तार करने के लिए (चूंकि एसक्यूएल सर्वर के उदाहरण स्पष्ट रूप से नामित हैं) - 'sa.create_engine ('mssql + pyodbc: // [machinename] \\ [servername]/[डेटाबेस]')' –

+1

वे डॉन नहीं करते हैं नाम नहीं होना चाहिए। "डिफ़ॉल्ट उदाहरण" के रूप में कॉन्फ़िगर किए गए SQL सर्वर आवृत्ति को कनेक्ट करना और उपयोग करना वास्तव में आसान है। नामांकित उदाहरणों की आवश्यकता होती है जब आप एक सर्वर पर एकाधिक SQL सर्वर उदाहरण होस्ट करेंगे। – marr75

6

मेरे पास DSNs का उपयोग किए बिना और Windows प्रमाणीकरण का उपयोग किए बिना MSSQL सर्वर से कनेक्शन के बारे में एक अद्यतन जानकारी है। मेरे उदाहरण में मेरे पास अगले विकल्प हैं: मेरा स्थानीय सर्वर नाम "(localdb) \ ProjectsV12" है। स्थानीय सर्वर नाम मैं डेटाबेस गुणों से देखता हूं (मैं विंडोज 10/विजुअल स्टूडियो 2015 का उपयोग कर रहा हूं)। मेरे db नाम "MainTest1"

engine = create_engine('mssql+pyodbc://(localdb)\ProjectsV12/MainTest1?driver=SQL+Server+Native+Client+11.0', echo=True) 

यह सिलसिले में चालक निर्दिष्ट करने के लिए जरूरत है। आप में अपने ग्राहक संस्करण मिल सकता है:

control panel>Systems and Security>Administrative Tools.>ODBC Data Sources>System DSN tab>Add

सूची से एसक्यूएल मूल क्लाइंट संस्करण पर देखो।

+0

यह एकमात्र ऐसा है जो मेरे लिए काम करता है। बहुत धन्यवाद! – Barka

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