スライドショー

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

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

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

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

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

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

準備しよう

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

 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ライブラリの動作に不満があれば、他のライブラリを試してみると良いでしょう。

それでは!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説