2021年3月10日水曜日

pyodbcを使ってMicrosoftのSQLserverのDBへアクセスする

pyodbcを使ってSQLserverのDBへアクセスしました。

環境

OS:Debian9
Python:3.8

基本的にDebian系(raspbian・Raspberry Pi OSなども)ならこのやり方で行けそうな気がする。

手順

下記コマンドでunixodbc、FreeTDSをインストールする
sudo apt-get update
sudo apt-get install unixodbc unixodbc-dev
sudo apt-get install freetds-dev tdsodbc


vi等のテキストエディタでsudoを付けて/etc/odbcinst.iniに下記を記述
[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
Setup = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so

/usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.soの部分は環境によっては違うかもしれない。
僕の環境(raspbianやDebian9)ではこのパスだった。
適宜libtdsodbc.soをフルパスで指定すること。


pipにてpyodbcをインストール
sudo pip install pyodbc

下記のようにPythonからMSSQLserverにアクセスできる。
下記は192.168.0.1にあるtest_dbというデータベースにuserというユーザー名でログインし、test_tbというテーブルのデータを全部取得し表示した例。

import pyodbc 
con = pyodbc.connect('DRIVER=FreeTDS;SERVER=192.168.0.1;PORT=1433;DATABASE=test_db;UID=user;PWD=pass;')
cursor = con()
cursor.execute( "SELECT * FROM test_tb" )
data = cursor.fetchall()
print(data)
cursor.close()
con.close()

connect時に指定するものについて
DRIVER:odbcinst.iniに[]で定義した名前を指定
SERVER:データベースが構築されているサーバのIPアドレスか名前を指定
PORT:SQLserverのサービスのポート番号を指定。特にいじってなければSQLserverのデフォルト値である1433で良い。
DATABASE:データベース名
UID:ユーザー名
PWD:ユーザのパスワード

このほかconnect時に下記項目も追加してTDSバージョンを指定する必要があるかもしれない。
TDS_Version=7.3; 
(7.3の部分は指定したいバージョンに合わせ変更)
僕は2008R2と2017で確認したがどちらもTDSバージョン指定は不要だった。

0 件のコメント:

コメントを投稿