私は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」に移動しましたが、ファイルは実際に存在します!
それで、なぜそれは存在しないと私に言うのですか?考えられる手がかりは次のとおりです。
これらの問題を解決する方法がわかりません。
ありがとう!
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
私に役立つ答えを見つけました here 。これはpython 2.7の場合(したがって、python 3.x)の解決策を探している人には機能しない可能性があります。
推奨される解決策は、libgccを更新することです:4.8.5-2-> 5.2.0-0
Libgccを更新するには、次のコマンドを使用します
conda update libgcc
私は同じ問題を抱えていました'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')
私の開発環境
次の提案は、問題の解決に役立つ場合があります。
odbcinst -j
_(_odbcinst.ini
_を確認してください)。odbcinst -j
_)から構成済みドライバーへのファイルパスが存在し、読み取り許可フラグと実行許可フラグ(_O_RDONLY|O_CLOEXEC
_)があることを確認してください。それでもファイルが存在するにもかかわらずfile not foundエラーが表示される場合、問題はlibgcc
バージョン不一致に関連している可能性があります- nehaljwaniのGitHubコメント 。解決策は、_conda update libgcc
_コマンドを実行してlibgcc
を更新することです。
関連: SQL Server用ODBCドライバー13は、AWS E2 ubuntuインスタンスに接続中にpyodbcでlibを開くことができません 。
MacOSの場合: Installing ODBC via HomeBrew 。
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モジュールはデータベースを見つけて接続できました。
少し遅いかもしれませんが、このスクリプトは私のために機能したままにしておきます。
私の問題はあなたのものと同じで、ドライバーの場所の変更、シンボリックリンクの作成、/ 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. conda update libgccを試してください(これは、pyodbcがインストールされたpyodbcが異なるバージョンのファイルを探すためです。)。これは修正された可能性があります..... link: https ://github.com/ContinuumIO/anaconda-issues/issues/1639 nehaljwani answerを探します。
2.また、/ etc/odbcinst.iniおよび/etc/odbc.iniのodbcファイルのバージョン番号を正しく確認します...名前とドライバーパスも一致する必要があります。