web-dev-qa-db-fra.com

Impossible d'établir une connexion au serveur SQL à l'aide de pyodbc sous Windows 7

J'utilise ActivePython 2.7.2.5 sur Windows 7.

En essayant de me connecter à une base de données SQL Server avec le module pyodbc en utilisant le code ci-dessous, je reçois le Traceback suivant. Des idées sur ce que je fais mal?

CODE:

import pyodbc
driver = 'SQL Server'
server = '**server-name**'
db1 = 'CorpApps'
tcon = 'yes'
uname = 'jnichol3'
pword = '**my-password**'

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
cursor = cnxn.cursor()
cursor.execute("select * from appaudit_q32013")
rows = cursor.fetchall()
for row in rows:
    print row

TRACEBACK:

Traceback (most recent call last):
  File "pyodbc_test.py", line 9, in <module>
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes')
pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect); [01000] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53)')
11
James Nicholson

Vous utilisez une chaîne de connexion de 'DRIVER={SQL Server};SERVER=server;DATABASE=db1;UID=uname;PWD=pword;Trusted_Connection=yes', vous essayez de vous connecter à un serveur appelé server, une base de données appelée db1, etc. Il n'utilise pas les variables que vous avez définies auparavant, elles ne sont pas utilisées.

Il est possible de passer les paramètres de chaîne de connexion en tant qu'arguments de mot clé à la fonction connect , vous pouvez donc utiliser:

cnxn = pyodbc.connect(driver='{SQL Server}', Host=server, database=db1,
                      trusted_connection=tcon, user=uname, password=pword)
19
mata

J'ai eu le même message d'erreur et dans mon cas, le problème était que les pilotes [SQL Server] nécessitaient TLS 1.0 qui est désactivé sur mon serveur. Passer à la nouvelle version du SNAC, SQL Server Native Client 11.0 a résolu le problème.

Donc ma chaîne de connexion ressemble à ceci:

cnxn = pyodbc.connect(driver='{SQL Server Native Client 11.0}', 
                      Host=server, database=db1, trusted_connection=tcon,
                      user=uname, password=pword)
9
user2096803

J'avais fait face à cette erreur pour une autre raison.
C'était parce que mon serveur avait un "port" en dehors de l'adresse.
Je pourrais résoudre ce problème en affectant la valeur suivante au paramètre "Server" de la chaîne de connexion.

"...;Server=<server_name>,<port#>;..."

Notez qu'il s'agit d'une 'virgule' et non d'un 'deux points'/'point'

1
murphy1310

Différents risques de sécurité existent avec l'une ou l'autre méthode. Si vous utilisez l'authentification SQL Server, vous exposez votre ID utilisateur/mot de passe dans le code. Mais au moins, vous traitez avec les mêmes informations d'identification. Si vous utilisez l'authentification Windows, vous devez vous assurer que tous les utilisateurs possibles sont configurés avec la bonne autorisation sur le serveur SQL. Avec l'authentification SQL, vous pouvez configurer un seul utilisateur, mais plusieurs personnes peuvent utiliser cet utilisateur Sql avec les autorisations.

0
RobPrell