Pythonを使用したゼロからの単純なリモートMySQLサーバ設定


このガイドは3つの部分に分けられている:
1. MySQLのインストール
2. Pythonでサーバーとデータベースの設定
3. Pythonのクライアントアプリの例

MySQLのインストール

  1. WindowsのMySQL Installerをダウンロードする (このリンクでMySQLのページへ行ける)。

  2. インストーラを実行する。

  3. 設定の種類として「Custom」を選んで、 Nextをクリックする。

  4. 「MySQL Server」とパソコンにインストールされているPythonのバージョンと一致する「MySQL Connector」を選んで、「Next」をクリックする。

  5. 「Execute」をクリックしてしばらく待つ。

  6. 「Next」を二回クリックする。

  7. 「Standalone MySQL Server / Classic MySQL Replication」を選んで、「Next」をクリックする。

  8. パソコンの設定として「Server Computer」を選んで、Nextをクリックする。
    メモ: このチュートリアルでは、「Developer Computer」と「Server Computer」の間に違いはない

  9. 「Use Strong Password Encryption for Authentication (RECOMMENDED)」を選んで「Next」をクリックする。

  10. ルート(root)アカウントのパスワードを決めて、「DB Admin]というタイプのユーザーを作って、 「Next」をクリックする。

  11. 「Next」をクリックする。

  12. 「Execute」をクリックして、MySQLの設定が終わるまで待つ。

  13. 「Finish」をクリックする。

  14. 「Next」をクリックする。

  15. 「Finish」をクリックする。

Pythonでサーバーとデータベースの設定

メモ: 以下の手続きはPythonを使わず、MySQL Shellで行うこともできる。

コネクタのインストール

まず、PythonでMySQLが使えるように、CommandPromptでpipを使い、コネクタをインストールする。そのために、pip install mysql-connectorを入力する。

Pythonの手続き

最初に、先述のモジュールをインポートする

setup_example.py
import mysql.connector as db

次に, サーバーと繋がるために、MySQLのインストールの時に設定された「root」というユーザ,およびそのパスワードをメンバとして MySQLConnectionのインスタンスを生成する。
その後、サーバーのカーソルを初期化する。

setup_example.py
mydb = db.connect(
    host = "localhost",
    user = "root",
    passwd = "password"
    )
mycursor = mydb.cursor()

次に、特権を持っているユーザー,および利用するデータベースを生成する。

setup_example.py

mycursor.execute("CREATE DATABASE IF NOT EXISTS my_database;")

# 「''」には自身で作成したユーザー名とパスワードを入れる
# clientipaddressをクライアントのIPアドレスに差し替える
mycursor.execute("CREATE USER IF NOT EXISTS 'username'@clientipaddress IDENTIFIED BY 'password';")
mycursor.execute("GRANT ALL PRIVILEGES ON *.* to 'username'@clientipaddress;")

次に、カーソルをデータベースに入れて、テーブルを生成する。

setup_example.py
mycursor.execute("use my_database;")
mycursor.execute("CREATE TABLE my_table (name varchar(20),age int(2));")

これで、データベースの設定が完了した。

Python Full Code

setup_example.py
import mysql.connector as db

mydb = db.connect(
    host = "localhost",
    user = "root", # サーバーのルートのアカウント
    passwd = "password"
    )

mycursor = mydb.cursor()

mycursor.execute("CREATE DATABASE IF NOT EXISTS my_database;")

# 「' ']に適切なユーザ名とパスワードを入力する
# clientipaddressをクライアントのIPアドレスに差し替える
mycursor.execute("CREATE USER IF NOT EXISTS 'username'@clientipaddress IDENTIFIED BY 'password';")
mycursor.execute("GRANT ALL PRIVILEGES ON *.* to 'username'@clientipaddress;")

# 何のデータベースを使うかを指定する
mycursor.execute("use my_database;")

# テーブルを生成する
mycursor.execute("CREATE TABLE my_table (name varchar(20),age int(2));")

今から、単純なクライアントアプリを作る

Pythonのクライアントアプリの例

この例で、ネットワーク上にあるパソコンのサーバーと繋がって、先に作っておいたテーブルにデータを入れる。

Python Step-by-Step

先ほどと同じく、コネクタのモジュールをインポートする

client_example.py
import mysql.connector as db

それから、サーバーとそれに入っているデータベースと繋がって、カーソルを初期化する

client_example.py
mydb = db.connect(
    host = serverpaddress, # replace for the server's IP address
    user = "username", # previously created user
    passwd = "password", # and its password
    database = "my_database" # we directly connect to the desired database
    )

mycursor = mydb.cursor()

次に, SQLのコマンドを作成して、 値を与えて, コマンドを実行する. データベースの変化を保存するために、コミットをする。

client_example.py
sql_command = "INSERT INTO my_table (name, age) values (%s, %s);"
values = ('my_name', 1)
mycursor.execute(sql_command, values)

# 変化を保存する
mydb.commit();

SELECTでテーブルに保存されている情報を見ることが出来る

client
sql_command = "select * from my_table"
mycursor.execute(sql_command)

[print(x) for x in mycursor.fetchall()]

出力が ('my_name', 1)であれば成功。

Example's Full Code

client_example.py
#必要なモジュールをインポートする
import mysql.connector as db

# データベースと繋がる
mydb = db.connect(
    host = serveripaddress, # サーバーのIPアドレスに差し替える
    user = "username", # サーバを設定する時に作られたユーザー
    passwd = "password", # とそのユーザーのパスワード
    database = "my_database" # 直接的にデータベースと繋がる
    )

#カーソルを初期化する
mycursor = mydb.cursor()

# コマンドを定義する
sql_command = "INSERT INTO my_table (name, age) values (%s, %s);"

# 値を与える
values = ('my_name', 1)

# コマンドを実行する
mycursor.execute(sql_command, values)

# 変化を保存させる
mydb.commit();

# データベースからデータをもらう
sql_command = "select * from my_table"
mycursor.execute(sql_command)

# データを出力する
[print(x) for x in mycursor.fetchall()]