Je suis nouveau dans le monde Linux et je veux interroger un serveur Microsoft SQL Server à partir de Python. Je l'ai utilisé sous Windows et c'était parfaitement correct, mais sous Linux, c'est assez pénible.
Après quelques heures, j'ai finalement réussi à installer le pilote Microsoft ODBC sur Linux Mint avec unixODBC.
Ensuite, j'ai créé un environnement anaconda avec python 3.
Je fais alors ceci:
import pyodbc as odbc
sql_PIM = odbc.connect("Driver={ODBC Driver 13 for SQL Server};Server=XXX;Database=YYY;Trusted_Connection=Yes")
Il retourne:
('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/Microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found (0) (SQLDriverConnect)")
La chose que je ne comprends pas, c’est que PyODBC semble lire le bon chemin de fichier de odbcinst.ini et ne fonctionne toujours pas.
Je suis allé à "/opt/Microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0" et le fichier existe!
Alors pourquoi me dit-il qu'il n'existe pas? Voici quelques indices possibles:
Je ne sais comment résoudre aucun de ces problèmes.
Merci !
J'ai également eu le même problème sur Ubuntu 14 après avoir suivi le tutoriel de Microsoft pour Pilote SQL Server Linux ODBC .
Le fichier existe et après avoir exécuté un ldd, il a montré qu'il manquait des dépendances:
/opt/Microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.20' not found (required by /opt/Microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0)
/opt/Microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version
CXXABI_1.3.8 'non trouvée (requis par
après avoir cherché pendant un moment, j’ai trouvé que c’est parce que le référentiel d’Ubuntu n’avait pas GLIBCXX sur la version 3.4.20, c’était à 3.4.19.
J'ai ensuite ajouté un dépôt à Ubuntu, mis à jour et forcé à mettre à niveau libstdc ++ 6
Sudo add-apt-repository ppa:ubuntu-toolchain-r/test
Sudo apt-get update
Sudo apt-get upgrade
Sudo apt-get install libstdc++6
Problème résolu, testé avec isql:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Après cela, j’ai essayé d’essayer avec pdo_odbc (PHP), il m’a donné le même pilote non trouvé, erreur . Pour résoudre ce problème, j’ai dû créer un lien symbolique pour corriger libodbcinst.so.2
:
Sudo ln -s /usr/lib64/libodbcinst.so.2 /lib/x86_64-linux-gnu/libodbcinst.so.2
J'ai trouvé une réponse qui fonctionne pour moi ici . Ceci est pour Python 2.7 (peut donc ne pas fonctionner pour ceux qui recherchent une solution pour Python 3.x).
La solution suggérée est de mettre à jour libgcc: 4.8.5-2 -> 5.2.0-0
Pour mettre à jour libgcc, utilisez cette commande
conda update libgcc
J'ai eu le même problème 'fichier non trouvé (0) (SQLDriverConnect)' sur MAC OS avec le code suivant
cnxn = pyodbc.connect (' DRIVER = {pilote ODBC 13 pour SQL Server} ; SERVER = monServeurIP, 1433; DATABASE = monDBName; UID = sa; PWD = dbPassword')
après avoir googlé pendant deux jours, je ne peux pas résoudre le problème, ni même modifier les fichiers freetds.conf, odbcinst.ini et odbc.ini
enfin, j'ai trouvé la solution en remplaçantDRIVERvalue
cnxn = pyodbc.connect (' DRIVER = {/ usr/local/lib/libmsodbcsql.13.dylib} ; SERVER = myServerIP, 1433; DATABASE = monDBName; UID = sa; PWD = dbPassword')
Mon environnement de dev
Les suggestions suivantes peuvent aider à résoudre le problème:
odbcinst -j
(cochez odbcinst.ini
).odbcinst -j
) existe et qu'il possède des indicateurs d'autorisation de lecture et d'exécutable (O_RDONLY|O_CLOEXEC
).Si vous obtenez toujours l'erreur file not found, bien que le fichier existe, il pourrait être lié à libgcc
version mismatch selon le commentaire GitHub de nehaljwani . La solution consiste à mettre à jour votre libgcc
en exécutant la commande conda update libgcc
.
Pour macOS, voir: Installation de ODBC via HomeBrew .
Peut-être qu'il est un peu tard, mais je laisse ce script qui a fonctionné pour moi.
Mon problème était le même que le vôtre et j'ai testé toutes les options telles que changer l'emplacement du pilote, créer un lien symbolique, modifier les fichiers /etc/*.ini, etc ... rien ne fonctionnait.
Mon problème, exécuter python 3.6, le paquet pyodbc dans un conteneur docker d’Alpine était la bibliothèque libssl1.0.0
Ici vous trouverez mon script d’installation pour pyodbcImage du menu fixe Debian 8 (Alpine) en utilisant le pilote v13
DRIVER = {Pilote ODBC 13 pour SQL Server}
La commande que j'ai exécutée pour la connexion à la base de données était la suivante:
import pyodbc
connection_string = 'DRIVER={ODBC Driver 13 for SQL Server};'
connection_string += 'SERVER={0};DATABASE={1};UID={2};PWD={3};'.format(Host,dbname,user,pwd)
connection = pyodbc.connect(connection_string)
eu le même problème une fois .. 1.try conda update libgcc (car pyodbc est installé via pip et conda recherchent différentes versions du fichier ..) .. cela aurait pu être corrigé .....link: https://github.com/ContinuumIO/anaconda-issues/issues/1639 cherchez la réponse de Nehaljwani.
2. Vérifiez également le numéro de version du fichier odbc dans /etc/odbcinst.ini et /etc/odbc.ini ... les noms doivent correspondre, ainsi que le chemin du pilote.
Je résous ce problème après l'installation de libssl1.0.0.
Tout d'abord, j'ai configuré ma chaîne de connexion de la manière suivante:
cnxn = pyodbc.connect('DRIVER={/usr/local/lib/libmsodbcsql.13.dylib};
SERVER=myServerIP,1433;DATABASE=myDBName;UID=sa;PWD=dbPassword')
Ensuite, j'ai installé libssl1.0.0:
echo "deb http://security.debian.org/debian-security jessie/updates main" >> /etc/apt/sources.list
apt-get install libssl1.0.0
Enfin, j'ai configuré les paramètres régionaux:
apt-get -y install locales
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
Après avoir suivi ces étapes, mon module python a pu trouver et se connecter à la base de données.