web-dev-qa-db-de.com

Verbindung zu MS SQL Server mit Windows-Authentifizierung mithilfe von Python herstellen?

Wie verbinde ich MS SQL Server mithilfe der Windows-Authentifizierung mit der pyodbc-Bibliothek?

Ich kann über MS Access und SQL Server Management Studio eine Verbindung herstellen, kann aber keine funktionierende ODBC - Zeichenfolge für Python erhalten.

Folgendes habe ich ausprobiert (auch ohne '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]')
38

Sie können die Verbindungszeichenfolge als eine lange Zeichenfolge angeben, die Semikolons (;) als Argumenttrennzeichen verwendet.

Arbeitsbeispiel:

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

Für Verbindungszeichenfolgen mit vielen Parametern wird Folgendes erreicht, jedoch auf eine etwas lesbarere Weise:

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

(Beachten Sie, dass zwischen den einzelnen String-Komponenten keine Kommas stehen.)

53
Gord Thompson

Die Windows-Authentifizierung kann auch mit einem Schlüsselwort angegeben werden. Funktionell unterscheidet sich nichts von der akzeptierten Antwort. Ich denke, das macht die Formatierung von Code etwas einfacher:

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

Ich wollte nur etwas hinzufügen, da ich die Lösungen hier mit localhost sehe; Meiner Erfahrung nach hat SQL Server Probleme damit, nicht sicher, ob es sich um den Treiber ODBC oder den Dienst itse handelt, und zieht die Verwendung von (local) vor, wenn Sie den Namen der lokalen Computer nicht angeben möchten.

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