71 votes

Impossible d'ouvrir la librairie 'ODBC Driver 13 for SQL Server' ? Problème de liaison Sym ?

Lorsque j'essaie de me connecter à une base de données sql server avec pyodbc (sur mac) :

import pyodbc

server = '####'
database = '####'
username = '####@####'
password = '#####'
driver='{ODBC Driver 13 for SQL Server}'

pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+password)

Je reçois l'erreur suivante :

Erreur : ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found (0) (SQLDriverConnect)")

Lorsque je me déplace dans l'emplacement actuel du pilote :

driver='/usr/local/lib/libmsodbcsql.13.dylib'

Ça commence à marcher !

Mon odbcinst.ini ressemble à ça :

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/usr/local/lib/libmsodbcsql.13.dylib
UsageCount=1

Comment puis-je obtenir ma référence à driver='{ODBC Driver 13 for SQL Server}' pour recommencer à travailler ?

J'ai d'abord utilisé ce guide pour installer le pilote. Et j'utilise anaconda sur Mac Sierra si cela peut aider ?

0 votes

Vous êtes un sauveur de vies

71voto

emehex Points 2250

En cours d'exécution :

odbcinst -j

Il a cédé :

unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /Users/emehex/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

Au lieu de copier les fichiers dans le /etc/ (je ne sais pas pourquoi unixODBC pensait qu'ils étaient là), j'ai créé un lien symbolique vers chaque fichier :

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini

Cela a résolu le problème.

2 votes

Bonne solution - pour répondre à votre question, unixODBC recherche par défaut les éléments suivants odbc.ini et odbcinst.ini sur /etc . Il vérifiera également le répertoire d'origine de l'utilisateur pour y trouver .odbc.ini et .odbcinst.ini . (FreeTDS fait la même chose avec freetds.conf / .freetds.conf pour mémoire).

6 votes

Cela fonctionne (bien que j'aie dû désinstaller et réinstaller le pilote). docs.microsoft.com/fr/sql/connect/odbc/linux-mac/ ), mais il y a une petite erreur de frappe : sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini

2 votes

Cette erreur peut également se produire si vous avez mis à jour une nouvelle version du pilote. Si les fichiers sont présents, vérifiez le contenu de /etc/odbcinst.ini : $ cat /etc/odbcinst.ini [ODBC Driver 17 for SQL Server] Description=Microsoft ODBC Driver 17 for SQL Server Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-17.0.so.1.1 UsageCount=1 Puis mettez à jour le contenu de votre scipt pour utiliser le nouveau pilote. Dans ce cas, le pilote a été mis à jour de la version 13 à la version 17. Je vous suggère d'ajouter cette information pour être complet.

47voto

Rene B. Points 330

Dans mon cas, j'ai un Mac OS et les commandes suivantes ont réglé le problème :

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools

Note 1 : Il se peut que vous deviez installer unixodbc à l'avance pour msodbcsql et mssql-tools comme les suivantes :

brew install unixodbc

Note 2 : Si vous n'avez pas déjà brew le gestionnaire de paquets manquants pour macOS, alors vous pouvez l'installer à partir d'ici : https://brew.sh/

Note 3 : Vous pouvez vérifier votre installation comme @emehex l'a déjà mentionné ci-dessus avec les commandes suivantes :

odbcinst -j

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini

1 votes

Merci beaucoup pour cette réparation rapide (Y)

2 votes

J'ai également dû ajouter les détails du pilote dans les paramètres de connexion. connection = pyodbc.connect("Driver={ODBC Driver 13 for SQL Server};" "Server=someHost;" "Database=dbname;" "uid=SA;pwd=passowrd")

1 votes

Ceci est périmé car brew ne prend plus en charge l'optin --no-sandbox (depuis début 2019). La solution implémentée est de supprimer cette option. voir github.com/Microsoft/homebrew-mssql-release/issues/29

43voto

Uzzal Podder Points 469

Dans mon cas, j'ai dû modifier le pyodbc la chaîne du pilote de la base de données vers
driver='{ODBC Driver 17 for SQL Server}'

En fait, dans mon code python pyodbc s'attendait à Pilote ODBC 13 mais, comme la version du pilote ODBC a été mise à jour (à cause de la mise à jour d'ubuntu) à la version actuelle Pilote ODBC 17 le problème s'est produit.

3 votes

Ça marche pour moi : driver={ODBC Driver 17 for SQL Server};

0 votes

Fonctionne sur SQL Server 2019 - driver={ODBC Driver 17 for SQL Server} ;

15voto

KevinQiang Points 191

Dans mon cas, j'ai réglé le problème en trois étapes comme suit :

# Step1: install unixodbc 
brew install unixodbc

# Step2: install Microsoft ODBC Driver for SQL Server on MacOS

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql mssql-tools

# Step3verify odbcinst configuration path is correct

odbcinst -j

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini

5voto

Evandro Points 926

Je construisais une image personnalisée au-dessus de Python et c'est la configuration qui a permis de la faire fonctionner :

FROM python:3.8 as pyodbc

COPY . /app
WORKDIR /app

# Required for msodbcsql17 and mssql-tools
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update

# Key might change in the future, replace with new one on the logs
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA6932366A755776
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update

RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools
RUN apt-get install unixodbc-dev

RUN pip install pipenv
RUN pipenv install --system --deploy

CMD [ "python" , "__init__.py"]

0 votes

Je reçois un 404 Not Found [IP: 91.189.95.85 80] Une idée à ce sujet ?

0 votes

@MikeSchem pas vraiment. Vous pouvez peut-être poster une nouvelle question avec votre problème et m'envoyer un @ ou un lien ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X