26

Come posso connettere MS SQL Server usando l'autenticazione di Windows, con la libreria pyodbc?Connessione a MS SQL Server con l'autenticazione di Windows usando Python?

È possibile connettersi tramite MS Access e SQL Server Management Studio, ma non riesco a ottenere una stringa ODBC di connessione funzionante per Python.

Ecco che cosa ho provato (anche senza '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]') 

risposta

41

È possibile specificare la stringa di connessione come una lunga stringa che utilizza punti e virgola (;) come separatore argomento.

esempio di lavoro:

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() 

Per le stringhe di connessione con un sacco di parametri, il seguente realizzare la stessa cosa, ma in un modo un po 'più leggibile:

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

(Si noti che non vi nessuna virgola tra i singoli componenti della stringa.)

+0

Grazie, la sintassi '. \' Ha fatto il trucco. Si noti che: 'pyodbc.connect ('Trusted_Connection = yes', driver = '{SQL Server}', server = '. \ [Server_name]', database = '[database_name]')' ha funzionato. – stackoverflowuser95

+0

come connettersi con userid e password – karnaf

+0

Questo non ha funzionato per me. Il commento qui sotto ha funzionato comunque. – CyprUS

16

L'autenticazione di Windows può anche essere specifica fied usando una parola chiave. Niente funzionalmente diversa dalla risposta accettata, penso che rende il codice formattazione di un po 'più facile:

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

Sì, l'ho scritto nel commento alla risposta accettata. – stackoverflowuser95

+0

@ stackoverflowuser95 Il tuo commento non include la parola chiave 'trusted_connection', è una combinazione di parole chiave e stringhe. Nota le differenze tra le tre opzioni [qui] (https://code.google.com/p/pyodbc/wiki/Module#connect). – Bryan

0

Volevo solo aggiungere qualcosa come la vedo le soluzioni qui utilizzando localhost; nella mia esperienza, SQL Server ha problemi con questo, non è sicuro se è il driver ODBC o il servizio itse, e preferisce l'uso di (locale) se non si desidera specificare il nome delle macchine locali.

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