Webアプリケーションで、MySQLデータベースが使われていることはご存知ですね?
他のアプリケーションでMySQLを使っているとなれば、自分がPythonで開発しているアプリでもMySQLを使いたい!と考えるのは自然なことです。
そこでこの記事では、PythonからMySQLを操作する方法をサッと説明します。
まずは、PythonからMySQLを操作する方法を知っておかないことには、一歩も進めません。
この記事でPythonからMySQLを操作する方法を学び、Webアプリケーションを作成する第一歩を踏み出してください!
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
準備しよう
少しでも現実に近づけるために、この記事では以下の環境を用意して、コードが動作するか確認しました。
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ライブラリの動作に不満があれば、他のライブラリを試してみると良いでしょう。
それでは!