Python – pyodbc で MySQL on Ubuntu 20.04 に接続する方法  No.98

自己投資としてチャレンジしている内容を 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 を利用

  1. Compressed TAR Archive (mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit.tar.gz)
  2. 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) をダウンロード

Download-mysql-connector-odbc-8.0.31-linux-glibc2.27-x86-64bit.tar.gz
Download

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

Download-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. 参考情報

  1. MySQL インストール Java – MySQL on Ubuntu に接続し、データ検索する方法 No.80 ”2-6. mysql java connector をインストール”
  2. ODBCインストールおよび構成 | ESET PROTECT | ESETオンラインヘルプ

以上です。参考になりましたら幸いです。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です