26

Jak podłączyć serwer MS SQL Server przy użyciu uwierzytelniania systemu Windows przy użyciu biblioteki pyodbc?Podłączanie do serwera MS SQL z uwierzytelnianiem Windows za pomocą Pythona?

Mogę połączyć się przez MS Access i SQL Server Management Studio, ale nie mogę uzyskać działającego połączenia ODBC string dla Pythona.

Oto co próbowałem (również bez 'Trusted_Connection=yes'):

pyodbc.connect('Trusted_Connection=yes', 
       driver='{SQL Server}', server='[system_name]', 
       database='[databasename]') 

pyodbc.connect('Trusted_Connection=yes', uid='me', 
       driver='{SQL Server}', server='localhost', 
       database='[databasename]') 

pyodbc.connect('Trusted_Connection=yes', 
       driver='{SQL Server}', server='localhost', 
       uid='me', pwd='[windows_pass]', database='[database_name]') 

pyodbc.connect('Trusted_Connection=yes', 
       driver='{SQL Server}', server='localhost', 
       database='[server_name]\\[database_name]') 

pyodbc.connect('Trusted_Connection=yes', 
       driver='{SQL Server}', server='localhost', 
       database='[server_name]\[database_name]') 

pyodbc.connect('Trusted_Connection=yes', 
       driver='{SQL Server}', 
       database='[server_name]\[database_name]') 

Odpowiedz

41

Można określić ciąg połączenia jako jeden długi ciąg znaków, który wykorzystuje średników (;) jako separatora argumentów.

przykład robocza:

import pyodbc 
cnxn = pyodbc.connect(r'Driver={SQL Server};Server=.\SQLEXPRESS;Database=myDB;Trusted_Connection=yes;') 
cursor = cnxn.cursor() 
cursor.execute("SELECT LastName FROM myContacts") 
while 1: 
    row = cursor.fetchone() 
    if not row: 
     break 
    print(row.LastName) 
cnxn.close() 

Dla ciągi połączeń z wieloma parametrami, co następuje będzie osiągnąć to samo, ale w nieco bardziej czytelny sposób:

conn_str = (
    r'Driver={SQL Server};' 
    r'Server=.\SQLEXPRESS;' 
    r'Database=myDB;' 
    r'Trusted_Connection=yes;' 
    ) 
cnxn = pyodbc.connect(conn_str) 

(Zauważ, że nie nie ma przecinków między poszczególnymi komponentami ciągów.)

+0

Dzięki, że ". \" Składnia zrobiła lewę. Zauważ, że: 'pyodbc.connect ('Trusted_Connection = yes', driver = '{SQL Server}', server = '. \ [Nazwa_serwera]', database = '[database_name]') również działało. – stackoverflowuser95

+0

jak połączyć się z identyfikatorem użytkownika i hasłem – karnaf

+0

To nie sprawiło mi żadnej pracy. Poniższy komentarz działał jednak. – CyprUS

16

Uwierzytelnianie systemu Windows może być również specyfikacją za pomocą słowa kluczowego. Nic funkcjonalnie różni się od przyjętego odpowiedź, myślę, że to sprawia, że ​​kod formatowania nieco łatwiejsze:

cnxn = connect(driver='{SQL Server}', server='localhost', database='test',    
       trusted_connection='yes') 
+0

Tak, napisałem to w komentarzu do zaakceptowanej odpowiedzi. – stackoverflowuser95

+0

@ stackoverflowuser95 Twój komentarz nie zawiera słowa kluczowego 'trusted_connection', jest mieszaniną słów kluczowych i ciągów. Zwróć uwagę na różnice między trzema opcjami [tutaj] (https://code.google.com/p/pyodbc/wiki/Module#connect). – Bryan

0

Chciałem tylko dodać coś jak widzę rozwiązania tutaj używając localhost; z mojego doświadczenia wynika, że ​​SQL Server ma problemy z tym, nie jest pewien, czy jest to sterownik ODBC lub usługa itse, i preferuje użycie (local), jeśli nie chcesz określać nazwy komputerów lokalnych.

cnxn = connect(driver='{SQL Server}', server='(local)', database='test',    
       trusted_connection='yes')