「PythonでODBC接続を行いたい」
「PythonからSQL Serverにアクセスしたい」
このような場合には、pyodbcがオススメです。
この記事では、pyodbcについて解説しています。
本記事の内容
- pyodbcとは?
- pyodbcのシステム要件
- pyodbcのインストール
- pyodbcの動作確認
それでは、上記に沿って解説していきます。
pyodbcとは?
pyodbcとは、ODBCによるデータベース接続のためのPythonライブラリです。
また、pyodbcはDB API 2.0仕様に基づいて実装されています。
ODBCは、そもそもMicrosoft社が制定したものです。
そのため、Windowsで動作するデータベース関連で用いられます。
その代表例としては、SQL Serverが挙げられます。
ある意味、pyodbcはSQL Server専用と言っても過言ではありません。
今では、Microsoft社はLinuxで動くSQL Serverを公開しています。
以上、pyodbcについて説明しました。
次は、pyodbcのシステム要件を説明します。
pyodbcのシステム要件
現時点(2022年7月)でのpyodbcの最新バージョンは、4.0.34となります。
この最新バージョンは、2022年7月15日にリリースされています。
pyodbcのシステム要件では、以下がポイントとなります。
- OS
- Pythonバージョン
- unixODBC
それぞれを下記で説明します。
OS
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
Pythonバージョン
サポート対象となるPythonのバージョンは、以下となっています。
- Python 2.7
- Python 3.6
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
このサポート状況は、以下のPython公式開発サイクルには準拠していません。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
2021年末でPython 3.6もサポート期限が終了しています。
そのため、2022年以降ではPython 3.7以降に対応していればOKです。
その点、pyodbcは幅広くメンテナンスしていると思います。
しかし、その分だけ処理やセキュリティの面でデメリットもあるでしょう。
個人的には、Python 3.6以前は切り捨てでよいと思います。
unixODBC
名前からわかるように、これにWindowsは関係ありません。
macOSとLinuxにおいて、注意すべきポイントになります。
unixODBCのインストール方法は、各OS毎に異なります。
詳細は、次のページで記載されています。
https://github.com/mkleehammer/pyodbc/wiki/Install
ここでは、Ubuntuのケースを載せておきます。
pyodbcのインストールの前に、次のコマンドを実行する必要があります。
sudo apt install unixodbc-dev
なお、Pythonは別途インストール済みという前提になります。
Ubuntuに初期でインストールされているPythonを利用するのはNGです!!
以上、pyodbcのシステム要件を説明しました。
次は、pyodbcのインストールを説明します。
pyodbcのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.10.2
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- pip 22.1.2 setuptools 63.2.0 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、pyodbcのインストールです。
pyodbcのインストールは、以下のコマンドとなります。
pip install pyodbc
pyodbcのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。
$ pip list Package Version ---------- ------- pip 22.1.2 pyodbc 4.0.34 setuptools 63.2.0 wheel 0.36.2
依存するパッケージは、ありません。
これであれば、既存環境へは影響をほとんど与えずにpyodbcを導入できます。
以上、pyodbcのインストールを説明しました。
次は、pyodbcの動作確認を説明します。
pyodbcの動作確認
pyodbcの動作確認を行うには、接続先のデータベースが必要になります。
さらに、そのデータベース用のODBCも必要です。
今回は、SQL Serverを接続先データベースとして動作確認を行います。
SQL Serverのインストールは、次の記事で解説しています。
そして、SQL Server用のODBCは次の記事に従えばインストールできます。
mssql-toolsは、最低限で必要なツールです。
今回は、すべて同じマシンにインストールします。
SQL Serverのサーバーとクライアントの両方を同じマシンにインストールという意味です。
データベースのサーバーとクライアントについて、よくわからない場合は次の記事をご覧ください。
ここまでの準備はできたでしょうか?
準備が整ったら、次のコードで動作確認を行います。
import pyodbc server = "localhost" database = "master" user = "sa" password = "Password1@" con = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' + server + ';DATABASE=' + database + ';UID=' + user + ';PWD=' + password + ';') cursor = con.cursor() cursor.execute("SELECT @@version;") row = cursor.fetchone() while row: print(row) row = cursor.fetchone() cursor.close()
上記コードを実行すると、次のような結果が表示されます。
Microsoft SQL Server 2022 (CTP2.0) - 16.0.600.9 (X64) May 20 2022 13:29:42 Copyright (C) 2022 Microsoft Corporation Express Edition (64-bit) on Linux (Ubuntu 20.04.4 LTS) <X64>
このように表示されれば、pyodbcの動作確認はOKです。
なお、データベースへの接続情報は各自の環境に合わせて変更してください。
ドライバーに関しては、次のファイルの内容に基づいています。
/etc/odbcinst.ini
[ODBC Driver 17 for SQL Server] Description=Microsoft ODBC Driver 17 for SQL Server Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1 UsageCount=1
この内容は、Microsoft ODBC 17(msodbcsql17)インストール時に自動的に追記されています。
以上、pyodbcの動作確認を説明しました。