【Python入門】MySQLを使ってみよう

Webアプリケーションで、MySQLデータベースが使われていることはご存知ですね?

他のアプリケーションでMySQLを使っているとなれば、自分がPythonで開発しているアプリでもMySQLを使いたい!と考えるのは自然なことです。

そこでこの記事では、PythonからMySQLを操作する方法をサッと説明します。

まずは、PythonからMySQLを操作する方法を知っておかないことには、一歩も進めません。

この記事でPythonからMySQLを操作する方法を学び、Webアプリケーションを作成する第一歩を踏み出してください!

なお、Pythonの記事については、こちらにまとめています。

目次

準備しよう

少しでも現実に近づけるために、この記事では以下の環境を用意して、コードが動作するか確認しました。

MySQLサーバークライアント(Python動作環境)
OSUbuntu 16.04 LTSWindows 10 64bit
MySQL5.7.22-0ubuntu0.16.04.1なし
IPアドレス192.168.56.102192.168.56.1
PythonなしAnaconda(Python 3.6)
Anaconda環境名:mysql

MySQLサーバでデータベースを作成しよう

Ubuntu 16.04 LTSでMySQLを起動して、データベース「test_db」ユーザー「user」を作成します。

MySQLの動作確認も兼ねて、Ubuntu 16.04 LTSで操作していきましょう。

(1)Ubuntu 16.04 LTSで端末を起動して、以下のコマンドを入力します。

mysql -u root -p

(2)MySQLのrootユーザーのパスワードを入力します。

(3)データベース「test_db」を作成するために、以下のコマンドを入力します。

CREATE DATABASE test_db;

(4)ユーザー「user」を作成するために、以下のコマンドを入力します。

GRANT ALL PRIVILEGES ON test_db.* TO 'user'@'192.168.56.%' IDENTIFIED BY 'xxxxxxxxxx';

mysql-connector-pythonライブラリをインストールしよう

Anaconda環境(mysql)に、mysql-connector-pythonライブラリ(MySQL Connector/Python)をインストールします。

(1)Anaconda環境(mysql)のターミナルを起動し、以下のコマンドを入力します。

pip install mysql-connector-python

他のライブラリと同じで、非常に簡単ですね。

MySQLのテーブルを作成しよう(CREATE TABLE)

ここからは、Pythonのコードを書いていきましょう。

まずは、テーブル「fruits_table」を作成するコードです。

import mysql.connector

db=mysql.connector.connect(host="192.168.56.102", user="user", password="xxxxxxxxxx")

cursor=db.cursor()

cursor.execute("USE test_db")
db.commit()
cursor.execute("""CREATE TABLE IF NOT EXISTS fruits_table(
                id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                fruits VARCHAR(32),
                value INT);""")
db.commit()

これを実行して、MySQLサーバーのmysqlプロンプトで「USE test_db;」と入力し、以下のように表示されたら成功です。

mysql> USE test_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| fruits_table      |
+-------------------+
1 row in set (0.00 sec)

データを挿入しよう(INSERT)

次は、データを4つ挿入するコードです。

同じような処理を行う場合は、ループを使うと良いですね。

import mysql.connector

db=mysql.connector.connect(host="192.168.56.102", user="user", password="xxxxxxxxxx")
cursor=db.cursor()

# データベース「test_db」を選択
cursor.execute("USE test_db")
db.commit()

# データを挿入
insert_fruit = "INSERT INTO fruits_table (fruits, value) VALUES (%s, %s);"

fruit_list = [
    ("apple", 100),
    ("orange", 80),
    ("melon", 500),
    ("pineapple", 700)
]

for fruit in fruit_list:
    cursor.execute(insert_fruit, fruit)

db.commit()

これを実行して、MySQLサーバーのmysqlプロンプトで「SELECT * FROM fruits_table;」と入力し、、以下のように表示されたら成功です。

mysql> SELECT * FROM fruits_table;
+----+-----------+-------+
| id | fruits    | value |
+----+-----------+-------+
|  1 | apple     |   100 |
|  2 | orange    |    80 |
|  3 | melon     |   500 |
|  4 | pineapple |   700 |
+----+-----------+-------+
4 rows in set (0.00 sec)

データを確認しよう(SELECT)

MySQLからデータを取得するコードです。

import mysql.connector

db=mysql.connector.connect(host="192.168.56.102", user="user", password="xxxxxxxxxx")
cursor=db.cursor()

# データベース「test_db」を選択
cursor.execute("USE test_db")
db.commit()

# データを取得
cursor.execute('SELECT * FROM fruits_table')
rows = cursor.fetchall()

# 出力
for i in rows:
    print(i)

ここでは、Pythonの実行結果が以下のように表示されたら成功です。

(1, 'apple', 100)
(2, 'orange', 80)
(3, 'melon', 500)
(4, 'pineapple', 700)

データを更新しよう(UPDATE)

ここまでくれば、だいたい同じだろうと思いますよね。

はい、だいたい同じです。

(1, ‘apple’, 100)を(1, ‘apple’, 1000)に更新するコードです。

import mysql.connector

db=mysql.connector.connect(host="192.168.56.102", user="user", password="xxxxxxxxxx")
cursor=db.cursor()

# データベース「test_db」を選択
cursor.execute("USE test_db")
db.commit()

# データを更新
cursor.execute('UPDATE fruits_table SET value=1000 WHERE fruits="apple"')
db.commit()

# データを取得
cursor.execute('SELECT * FROM fruits_table')
rows = cursor.fetchall()

# 出力
for i in rows:
    print(i)

Pythonの実行結果が以下のように表示されたら成功です。

(1, 'apple', 1000)
(2, 'orange', 80)
(3, 'melon', 500)
(4, 'pineapple', 700)

データを削除しよう(DELETE)

最後に、(3, ‘melon’, 500)を削除するコードです。

import mysql.connector

db=mysql.connector.connect(host="192.168.56.102", user="user", password="i3Lph_kaZlpop0th1st")
cursor=db.cursor()

# データベース「test_db」を選択
cursor.execute("USE test_db")
db.commit()

# データを削除
cursor.execute('DELETE FROM fruits_table WHERE fruits="melon"')
db.commit()

# データを取得
cursor.execute('SELECT * FROM fruits_table')
rows = cursor.fetchall()

# 出力
for i in rows:
    print(i)

確認すると、確かに(3, ‘melon’, 500)が削除されていますね。

(1, 'apple', 1000)
(2, 'orange', 80)
(4, 'pineapple', 700)

まとめ

今回は、PythonMySQLを操作する方法として、mysql-connector-pythonライブラリ(MySQL Connector/Python)を使う手法を紹介しました。

結局、SQL文を投げるだけ?と言われそうなので、INSERT文の例では、少しPythonらしく書いてみました。

また、SELECT文の結果をPythonで受け取る方法もわかるようにしましたので、参考にしていただけると嬉しいです。

もし、mysql-connector-pythonライブラリの動作に不満があれば、他のライブラリを試してみると良いでしょう。

それでは!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次