5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-31

このガイドは3つの部分に分けられている:

  1. MySQLのインストール
  2. Pythonでサーバーとデータベースの設定
  3. Pythonのクライアントアプリの例

MySQLのインストール

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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()]
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?