(1) PythonにpyodbcをインストールしてSQLServerに接続する手順
(1-1) 手順1:ODBCドライバのインストール
(1-2) 手順2:pythonパッケージの導入
(1-3) 手順3:疎通テスト
(2) エラー対処
(2-1) エラー概要
(2-2) エラー原因
(2-3) エラー対処
(3) その他メモ
(1) PythonにpyodbcをインストールしてSQLServerに接続する手順
手順は大きく2つに分かれています。
「手順1」では「ODBCドライバー」のインストールを行います。ODBCドライバーはクライアントがDBと連携するためのモジュール(DLL)で、DBに対してSQLを連携して結果を受け取る等の仲介を行います。
「手順2」では「pyodbcライブラリ」のインストールを行います。pyodbcはPythonのライブラリで、DB接続に必要となるDBAPIの仕様を実装したモジュール(DLL)です。
この2つの手順を経る事で『PythonのプログラムからSQLServerのデータベースにアクセスしてSQLを発行する事』が可能になります。
ODBCドライバーとアプリやデータベースの関係性については別記事で整理しています。
⇒(★作成中)
(1-1) 手順1:ODBCドライバのインストール
前半部分に相当するODBCドライバーのインストール手順を紹介します。
(※ただし、画面等は2020年1月時点のため実際と異なる場合がございますのでご留意ください)
①ドライバーのダウンロード
Microsoftの下記サイトにアクセスし「~ODBC Driver 17 for SQL Server ~をダウンロード」と書かれたリンクを選択します。
https://docs.microsoft.com/ja-jp/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver15
(図111)①
↓
②Downloadを押下します。
(図111)②
↓
③ご自身のOSバージョンに合ったインストーラを選択します(32bitならx86を、64bitならx64を選択)
(図111)③
↓
④ダウンロードが開始されます。
(図111)④
↓
⑤資源(.msiファイル)をインストール先のサーバに配置して実行します(ダブルクリック)。
(図111)⑤
↓
⑥インストーラの案内に沿ってインストールを進めます。
(図111)⑥
↓
⑦ライセンス条件がOKならNextを押下
(図111)⑦
↓
⑧インストールしたい機能を選択します。
(図111)⑧
↓
⑨インストールに伴うディスクの使用量を確認します。
(図111)⑨
↓
⑩「Install」を押下してインストールを開始します。
(図111)⑩
↓
(図111)⑪進行中
↓
(図111)⑫完了
(1-2) 手順2:pythonパッケージの導入
①pyodbc資源のダウンロード
PyPIページにアクセスして、pyodbcのパッケージをダウンロードします。
https://pypi.org/project/pyodbc/
(図121)①
↓
②「pyodbc-X.X.XX.tar.gz」ファイルをダウンロードします。
(図121)②
↓
③ダウンロードした資源をインストール先のサーバに配備して実行します。
(図121)③
↓
④インストールの開始
まずはpyodbcのダウンロード済みパッケージがある階層まで移動します(~\pyodbc\srcなど各自のパス)。移動できたらpipコマンドを実行します。
# pip install pyodbc_4.0.2.tar.gz
(図121)④移動できたらdirコマンドでファイルの存在をチェック
↓
(図121)⑤pipコマンドの実行
↓
(図121)⑥インストール完了
(1-3) 接続テスト
最後に接続テストとして、PythonのプログラムからSQLServerのテーブルにアクセスできるか?を確認します。
Python側で次の例のようなサンプルプログラムを実行して、疎通チェックを行います。
(サンプルプログラム)
import pyodbc def DbConnection(): driver='{SQL Server}' server='[DB IP address]' database='[Database Name]' uid='[DB User]' pwd='[DB Password]' cnxn=pyodbc.connect('DRIVER='+driver+';SERVER='+server+';DATABASE='+database+';UID='+uid+';PWD='+pwd+';') cursor=cnxn.cursor() sql="SELECT * FROM dbo.spt_monitor" cursor.execute(sql) row=cursor.fetchone() while row: print(row[0]) row=cursor.fetchone() cursor.close() def main(): DbConnection() pass if __name__ == '__main__': main()
(図121)⑦
プログラムを実行した結果、データベースのテーブル内容がPythonの実行結果に表示されています。
(2) エラー対処
(2-1) エラー概要
もし次のようなエラーが出た場合の対処についても触れておきます。
(図131)①
(エラーメッセージ例)
copying build\lib.win-amd64-3.7\pyodbc.cp37-win_amd64.pyd -> c:\program files (x86)\microsoft visual studio\shared\python37_64\Lib\site-packages error: could not create 'c:\program files (x86)\microsoft visual studio\shared\python37_64\Lib\site-packages\pyodbc.cp37-win_amd64.pyd': Permission denied
(2-2) エラー原因
メッセージの最後の部分にあるように、Permission Deniedつまり権限の不足が原因です。具体的にはエラーメッセージに書かれているパス(上記の例では「c:\program files (x86)\microsoft visual studio\shared\python37_64」へのアクセス権限が不足している事が読み取れます)。
(2-3) エラー対処
インストールを実行するユーザに上記のフォルダのアクセス権限を付与する等の対応により、事象が解決する可能性があります。
(図131)②
(3) その他メモ
もしかすると「VC_redist_x64.exe」も必要かも知れません。
https://github.com/mkleehammer/pyodbc/issues/663
インストールする場合は次の記事もご参考頂けたらと思います。
https://rainbow-engine.com/pandas-unicode-encodeerror/