web-dev-qa-db-fra.com

Pyodbc: erreur de délai d'expiration de connexion

J'essaie de me connecter à MS SQL Server à l'aide de pyodbc à partir d'une machine distante exécutant Ubuntu 16.04.

import pyodbc 

conn = pyodbc.connect(r'DRIVER=ODBC Driver 17 for SQL Server; SERVER=xxxTest-SRV; PORT=51333; DATABASE=TestDB; UID=xxxx; PWD=xxxx;')

Je reçois l'erreur suivante:

pyodbc.OperationalError: ('HYT00', '[HYT00] [unixODBC] [Microsoft] [Pilote ODBC 17 pour SQL Server] Délai de connexion expiré (0) (SQLDriverConnect)')

J'ai essayé d'utiliser le serveur IP dans la chaîne de connexion mais toujours pas de chance.

Cependant, je peux me connecter en utilisant sqlcmd depuis le terminal
Travaux suivants:

sqlcmd -S xxxTest-SRV, 51333 -d TestDB -U xxxx -P xxxx

Je n'ai trouvé aucun problème qui a donné une réponse à mon problème.

odbcinst.ini

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/Microsoft/msodbcsql/lib64/libmsodbcsql-17.1.so.1.1
UsageCount=1

Il semble toujours y avoir un problème de connexion à MS SQL Server à l'aide de pyodbc à partir d'une machine Linux. Existe-t-il un moyen de se connecter à SQL Server à partir de Python. J'apprécierai votre aide pour résoudre cette erreur. Je vous remercie.

[MISE À JOUR]

Selon la réponse ci-dessous, j'ai mis à jour la chaîne de connexion. Mais maintenant, j'obtiens l'erreur suivante:

pyodbc.Error: ('01000', "[01000] [unixODBC] [Driver Manager] Can't open lib '/opt/Microsoft/msodbcsql17/lib64/libmsodbcsql-17.0.so.1.1': fichier introuvable (0) (SQLDriverConnect) ")

Ma odbcinst.ini définition du pilote de fichier:

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/Microsoft/msodbcsql17/lib64/libmsodbcsql-17.0.so.1.1
UsageCount=1

La connexion à MS SQL Server à partir d'une machine Linux a toujours été un cauchemar. Pouvez-vous indiquer quelle version de pyodbc, unixODBC et Driver est la plus stable?

J'ai installé le pilote suivant this instructions Microsoft. Ma pyodbc version est 4.0.23

10
Krishnang K Dalal

Les pilotes ODBC pour SQL Server n'utilisent pas de PORT= paramètre. Le numéro de port, le cas échéant, est ajouté au nom/IP du serveur avec une virgule, par exemple,

SERVER=xxxTest-SRV,51333;
7
Gord Thompson

J'ai rencontré le même type de problème, mais mon scénario se connecte au serveur SQL hébergé sur l'instance ec2 via la fonction AWS Lambda à l'aide du module PyOdbc. Pour moi, le remplacement du nom d'hôte par l'adresse IP de l'instance ec2 l'a corrigé.

J'ai découvert qu'il n'était pas en mesure de résoudre le DNS. Donc, si l'une des étapes ci-dessus n'a pas fonctionné pour vous, essayez d'utiliser l'adresse IP et de commenter ici

0
Vin Odh