web-dev-qa-db-fra.com

Connexion à MS SQL Server avec authentification Windows à l'aide de Python?

Comment connecter MS SQL Server à l'aide de l'authentification Windows à la bibliothèque pyodbc?

Je peux me connecter via MS Access et SQL Server Management Studio, mais je ne peux pas obtenir une chaîne de connexion ODBC active pour Python.

Voici ce que j'ai essayé (également sans '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

Vous pouvez spécifier la chaîne de connexion en tant que chaîne longue utilisant des points-virgules (;) comme séparateur d'arguments.

Exemple de travail:

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

Pour les chaînes de connexion avec beaucoup de paramètres, ce qui suit accomplira la même chose mais d'une manière un peu plus lisible:

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

(Notez qu'il n'y a pas de virgule entre les composants de chaîne individuels.)

53
Gord Thompson

L'authentification Windows peut également être spécifiée à l'aide d'un mot clé. Rien de différent sur le plan fonctionnel de la réponse acceptée, je pense que cela facilite un peu le formatage du code:

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

Je voulais juste ajouter quelque chose car je vois les solutions ici en utilisant localhost; Selon mon expérience, SQL Server a des problèmes avec cela, ne sachant pas si c'est le pilote ODBC ou le service itse, et préfère utiliser (local) si vous ne voulez pas spécifier le nom des ordinateurs locaux.

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