Webアプリケーションで、MySQLデータベースが使われていることはご存知ですね?
他のアプリケーションでMySQLを使っているとなれば、自分がPythonで開発しているアプリでもMySQLを使いたい!と考えるのは自然なことです。
そこでこの記事では、PythonからMySQLを操作する方法をサッと説明します。
まずは、PythonからMySQLを操作する方法を知っておかないことには、一歩も進めません。
この記事でPythonからMySQLを操作する方法を学び、Webアプリケーションを作成する第一歩を踏み出してください!
準備しよう
少しでも現実に近づけるために、この記事では以下の環境を用意して、コードが動作するか確認しました。
| MySQLサーバー | クライアント(Python動作環境) |
OS | Ubuntu 16.04 LTS | Windows 10 64bit |
MySQL | 5.7.22-0ubuntu0.16.04.1 | なし |
IPアドレス | 192.168.56.102 | 192.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)
まとめ
今回は、PythonでMySQLを操作する方法として、mysql-connector-pythonライブラリ(MySQL Connector/Python)を使う手法を紹介しました。
結局、SQL文を投げるだけ?と言われそうなので、INSERT文の例では、少しPythonらしく書いてみました。
また、SELECT文の結果をPythonで受け取る方法もわかるようにしましたので、参考にしていただけると嬉しいです。
もし、mysql-connector-pythonライブラリの動作に不満があれば、他のライブラリを試してみると良いでしょう。
それでは!