PythonスクリプトからMySQL Serverにリモート接続しよう
今回は、Pythonスクリプトから別マシンにあるMySQL Serverに接続してみましょう。
MySQL ServerとPythonの接続には、MySQL Connector/Pythonライブラリーを使います。
なお、MySQL ServerとPythonは、それぞれ別マシンのWindows10 home上に存在しています。
MySQL側の準備
前提として、MySQL Serverはインストールされている状態とします。
MySQL Serverのインストールは、こちらの記事 を参照してください。
ユーザーを作成する
PythonスクリプトからMySQL Serverに接続するためのユーザーを作成します。
CREATE USER ユーザー名@'許可するIPアドレス(ホスト名)' IDENTIFIED BY 'パスワード';
ワイルドカードは、「'%'」を使います。
実行例
mysql> CREATE USER user1@'192.168.%' IDENTIFIED BY 'password1';
DBを作成する
DBを作成します。
CREATE DATABASE DB名;
実行例
mysql> CREATE DATABASE db1;
DB権限を追加する
Pythonスクリプトからリモート接続するDBに権限を追加します。
GRANT all ON DB名.テーブル名 TO ユーザー名@'IPアドレス';
実行例
mysql> GRANT all ON db1.* TO user1@'192.168.%';
メモ
allは全ての権限を許可しています。
Python側の準備
PythonスクリプトからMySQL Serverに接続するために、MySQL Connector/PythonをPythonスクリプトがあるマシン上にインストールします。
MySQL Connector/Pythonは、PythonスクリプトからMySQL Serverに接続するためのライブラリーとドライバーです。
前提として、Python本体はインストールしている状態とします。
MySQL Connector/Pythonをインストールする
MySQL Connector/Pythonのインストールは、Pythonのpipコマンドで行います。
pip install mysql-connector-python
MySQL Connector/Pythonをインポートする
MySQL Connector/Pythonのインポートは、以下のように行います。
import mysql.connector
MySQL Serverに接続する
MySQL Serverへの接続は、以下のように行います。
接続オブジェクト = mysql.connector.connect(オプション)
実行例
cnx = mysql.connector.connect(user='scott', password='password', host='192.168.0.1', database='db1')
mysql.connector.connect()のオプション
mysql.connector.connect()の主なオプションは、以下の通りです。
オプション名 | 内容 |
user | MySQL Serverの認証で使用されるユーザー名 |
password | MySQL Serverの認証で使用されるパスワード |
database | MySQL Serverに接続する時の、DB名 |
host | MySQL Serverのホスト名またはIPアドレス(デフォルトは127.0.0.1) |
port | MySQL ServerのTCP/IPポート。整数(デフォルトは3306) |
charset | 使用するMySQL文字セット(デフォルトはutf8) |
connection_timeout | TCPおよびUNIXソケット接続のタイムアウト |
MySQL Serverから切断する
MySQL Serverからの切断は、以下のように行います。
接続オブジェクト.close()
実行例
cnx.close()
カーソルを作成する
MySQL Connector/PythonでMySQL Serverとデータのやり取りをするには、カーソル(cursor)を使います。
カーソルオブジェクト = 接続オブジェクト.cursor()
実行例
cursor = cnx.cursor()
カーソルをクローズする
カーソルを使い終わったら、close()メソッドを使ってカーソルをクローズします。
このメソッドは、すべての結果をリセットして、カーソルオブジェクトが元の接続オブジェクトを参照しないようにします。
カーソルオブジェクト.close()
実行例
cursor.close()