web-dev-qa-db-ja.com

PyODBC:ドライバーが存在しても開けない

私はLinuxの世界に慣れていないので、PythonからMicrosoft SQL Serverを照会したいと思います。私はそれをWindowsで使用しましたが、まったく問題ありませんでしたが、Linuxでは非常に苦痛です。

数時間後、unixODBCを使用してLinux MintにMicrosoft ODBCドライバーをインストールすることに成功しました。

次に、python 3環境でanacondaをセットアップします。

次にこれを行います:

import pyodbc as odbc

sql_PIM = odbc.connect("Driver={ODBC Driver 13 for SQL Server};Server=XXX;Database=YYY;Trusted_Connection=Yes")

それは返します:

('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/Microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found (0) (SQLDriverConnect)")

私が理解していないのは、PyODBCがodbcinst.iniから正しいファイルパスを読み取っているように見え、それでも動作しないということです。

「/opt/Microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0」に移動しましたが、ファイルは実際に存在します!

それで、なぜそれは存在しないと私に言うのですか?考えられる手がかりは次のとおりです。

  • 私は仮想環境にいます
  • ルートファイルパスであるため、「読み取り」権限が必要です。

これらの問題を解決する方法がわかりません。

ありがとう!

21
Joseph Yourine

SQL Server Linux ODBC Driver 。]のMicrosoftチュートリアルに従った後、Ubuntu 14でも同じ問題が発生しました。

ファイルが存在し、lddを実行した後、依存関係が欠落していることが示されました。

/opt/Microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:バージョン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 'が見つかりません(必須)

ubuntuのレポにはバージョン3.4.20のGLIBCXXがなかったため、しばらく検索した後、3.4.19にありました。

その後、Ubuntuにリポジトリを追加し、更新して、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

問題を解決し、isqlでテスト:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

その後、pdo_odbc(PHP)を使用してテストしてみたところ、同じドライバーが見つからないというエラーが表示されました。これを解決するには、シンボリックリンクを作成してlibodbcinst.so.2

Sudo ln -s /usr/lib64/libodbcinst.so.2 /lib/x86_64-linux-gnu/libodbcinst.so.2
14
RBarreto

私に役立つ答えを見つけました here 。これはpython 2.7の場合(したがって、python 3.x)の解決策を探している人には機能しない可能性があります。

推奨される解決策は、libgccを更新することです:4.8.5-2-> 5.2.0-0

Libgccを更新するには、次のコマンドを使用します

conda update libgcc
4
sanhitamj

私は同じ問題を抱えていました'file not found(0)(SQLDriverConnect)'次のコードでMAC OSに

cnxn = pyodbc.connect( 'DRIVER = {SQL Server用ODBCドライバー13}; SERVER = myServerIP、1433; DATABASE = myDBName; UID = sa; PWD = dbPassword')

2日間グーグルをした後、freetds.conf、odbcinst.ini、odbc.iniを変更しても問題を修正できません。

最後に、[〜#〜] driver [〜#〜] valueを置き換えることで解決策を見つけました。

cnxn = pyodbc.connect( 'DRIVER = {/ usr/local/lib/libmsodbcsql.13.dylib}; SERVER = myServerIP、1433; DATABASE = myDBName; UID = sa; PWD = dbPassword')

私の開発環境

  • MAC OSエルキャピタン
  • anacondaのpython 3.6.1
3
Karen Chang

次の提案は、問題の解決に役立つ場合があります。

2
kenorb

Libssl1.0.0をインストールした後、この問題を解決します。

まず、この方法で接続文字列を設定します。

    cnxn = pyodbc.connect('DRIVER={/usr/local/lib/libmsodbcsql.13.dylib};   
    SERVER=myServerIP,1433;DATABASE=myDBName;UID=sa;PWD=dbPassword')

次に、libssl1.0.0をインストールしました。

    echo "deb http://security.debian.org/debian-security jessie/updates main" >> /etc/apt/sources.list
    apt-get install libssl1.0.0

最後に、ロケールをセットアップします。

    apt-get -y install locales 
    echo "en_US.UTF-8 UTF-8" > /etc/locale.gen 

これらの手順を実行した後、my pythonモジュールはデータベースを見つけて接続できました。

1

少し遅いかもしれませんが、このスクリプトは私のために機能したままにしておきます。

私の問題はあなたのものと同じで、ドライバーの場所の変更、シンボリックリンクの作成、/ etc/*。iniファイルの変更など、すべてのオプションをテストしましたが、何も機能しませんでした。

私の問題は、python 3.6、Alpineのdockerコンテナのpyodbcパッケージはライブラリlibssl1.0.0でした。

ここにあります pyodbcのインストールスクリプトDebian 8(Alpine)docker image ドライバーv13を使用

DRIVER = {SQL Server用ODBCドライバー13}

データベース接続のために実行したコマンドは次のとおりです。

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)
1
nenetto

同じ問題が一度ありました。1. conda update libgccを試してください(これは、pyodbcがインストールされたpyodbcが異なるバージョンのファイルを探すためです。)。これは修正された可能性があります..... link: https ://github.com/ContinuumIO/anaconda-issues/issues/1639 nehaljwani answerを探します。

2.また、/ etc/odbcinst.iniおよび/etc/odbc.iniのodbcファイルのバージョン番号を正しく確認します...名前とドライバーパスも一致する必要があります。

0
Nikhil Dhara