自己投資としてチャレンジしている内容を Blog で公開しています。今回は python で pyodbc を使い MySQL に接続し Select 文を実行する方法について紹介します。
▼1. pyodbc による MySQL on Ubntu への 接続
本 blog では MySQL への接続や処理に関して Java でのコーディングについて過去に紹介していましたが、python を使った紹介はありませんでした。今後 python を使った、pyodbc による MySQL への接続や処理について共有したいと思います。
(2022/12 時点)
Java – MySQL 検索結果を Azure Blob Storage に保存 No.86
Java – MySQL on Ubuntu 検索結果をテキストに保存 No.85
Java – MySQL on Ubuntu に接続し、データ検索する方法 No.80
▼2. 事前準備
2-1. MySQL on Linux をインストール
参照 Java – MySQL on Ubuntu に接続し、データ検索する方法 No.80 ”2-6. mysql java connector をインストール”
2-2. MySQL の Connector/ODBC 8.0.31 のインストール
詳細はこちら ODBCインストールおよび構成 | ESET PROTECT | ESETオンラインヘルプ
2-2-1. 最初に 2 種類のファイルを MySQL のサイトからダウンロード
ご利用の Ubuntu のバージョンに合わせてダウンロードファイルを変更ください。今回は Ubuntu 20.04 を利用
- Compressed TAR Archive (mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit.tar.gz)
- Ubuntu Linux 20.04 (x86, 64-bit), DEB Package (mysql-connector-odbc-setup_8.0.31-1ubuntu20.04_amd64.deb)
— ダウンロード手順
A. MySQL のダウンロードサイトから、Compressed TAR Archive (mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit.tar.gz) をダウンロード


B.MySQL のサイトから、Ubuntu Linux 20.04 (x86, 64-bit), DEB Package (mysql-connector-odbc-setup_8.0.31-1ubuntu20.04_amd64.deb)をダウンロード

2-2-2. ダウンロードした tar.gz のファイルの解凍
解凍後 /bin/ や /lib/ 配下のファイルを /usr/local/ の /bin/ や /lib/ にコピーします。
tar xzvf ./mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit.tar.gz
cd /home/xxx/mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit/
sudo cp bin/* /usr/local/bin
sudo cp lib/* /usr/local/lib
2-2-3. myodbc-installer を使い ODBCのドライバーを登録
sudo myodbc-installer -a -d -n "MySQL ODBC 8.0 Driver" -t "Driver=/usr/local/lib/libmyodbc8w.so"
sudo myodbc-installer -a -d -n "MySQL ODBC 8.0" -t "Driver=/usr/local/lib/libmyodbc8a.so"
myodbc-installer -d -l
2-2-4. ODBC ドライバーの登録の確認
cat /etc/odbcinst.ini
(結果)
[MySQL ODBC 8.0 Driver]
Driver=/usr/local/lib/libmyodbc8w.so
UsageCount=2
[MySQL ODBC 8.0]
Driver=/usr/local/lib/libmyodbc8a.so
UsageCount=2
2-2-5. myodbc-connector-odbc のセットアップ
2-2-1 の 2 でダウンロードした deb をインストールします。
これにより /usr/lib/x86_64-linux-gnu/ 配下に odbc のフォルダができ、関連するファイルが生成されます。
sudo dpkg -i ./mysql-connector-odbc-setup_8.0.31-1ubuntu20.04_amd64.deb
2-2-6. /etc/odbc.init を追記
vi /etc/odbc.init
(以下を追記します)
[MySQL]
Description = ODBC for MySQL
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8S.so
FileUsage=1
2-2-7. 構成ファイルを更新
sudo odbcinst -i -d -f /etc/odbcinst.ini
(結果)
odbcinst: Driver installed. Usage count increased to 2.
Target directory is /etc
odbcinst: Driver installed. Usage count increased to 2.
Target directory is /etc
odbcinst: Driver installed. Usage count increased to 2.
Target directory is /etc
odbcinst: Driver installed. Usage count increased to 2.
Target directory is /etc
odbcinst: Driver installed. Usage count increased to 2.
Target directory is /etc
odbcinst: Driver installed. Usage count increased to 2.
Target directory is /etc
▼3. pyodbc で MySQL に接続し Select を実行する Python コード
3-1. MySQL on Linux に接続し Select を実行する python コード
Python のコード runmysqlquery.py を作成します。環境に合わせてパラメータを変更します。
import pyodbc
driver = '{MYSQL ODBC 8.0 Driver}'
server = 'localhost'
dbname = 'testdb'
user = 'hiveuser'
pw = 'hivepassword'
query = "select * from testtbl"
try:
conn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';DATABASE='+dbname+';UID='+user+';PWD='+pw+';')
cursor = conn.cursor()
cursor.execute(query)
row = cursor.fetchone()
while row:
print(str(row[0]) + " " + str(row[1]))
row = cursor.fetchone()
except pyodbc.Error as ex:
sqlstate = ex.args[1]
print(sqlstate)
3-2. 実行結果
エラーなく実行した結果が以下です。Select の実行結果が表示されます。
python3 runmysqlquery.py
(結果)
1 1
2 2
3 3
▼4. 参考情報
- MySQL インストール Java – MySQL on Ubuntu に接続し、データ検索する方法 No.80 ”2-6. mysql java connector をインストール”
- ODBCインストールおよび構成 | ESET PROTECT | ESETオンラインヘルプ
以上です。参考になりましたら幸いです。