MySQLインストールしてPythonからアクセスするまで

MySQLインストールしてPythonからアクセスするまで

MySQLインストールしてPythonからアクセスするまで

Windows10 + MySQL8.0 + Python3.8.5

MySQLをPythonから使いたかった。
そもそもPCにMySQLが入ってないのでそこからやる。

1. MySQLインストーラーダウンロード

MySQLの公式サイトからダウンロード。
https://dev.mysql.com/downloads/windows/installer/



「Windows (x86, 32-bit), MSI Installer」をダウンロード。
2つあるうちのサイズが小さいほうはインストール時にダウンロードするタイプ。
どちらでもいいが大きいほうにした。



アカウントの作成を勧められる。
アカウントを作りたくないので下の「No thanks, just start my download.」を押す。

2. MySQLインストール

「mysql-installer-community-8.0.22.0.msi」を実行。
インストール時に選択肢がいくつかある。

  1. Choosing a Setup Type

Developerなので「Developer Default」を選択。

  1. Check Requirements


足りないものがあるから「MySQL for Visual Studio 1.2.9」がインストールできないらしい。
いらないので無視して「Next」。

  1. Installation

「Execute」を押してインストール。

  1. Product Configuration

「Next」を押してMySQL Serverの初期設定をする。

  1. Type and Networking

デフォルト設定のまま「Next」。

  1. Authentication Method

デフォルト設定のまま「Next」。

  1. Accounts and Roles

rootのパスワードを設定する。

  1. Windows Service

デフォルト設定のまま「Next」。

  1. Apply Configuration

「Execute」を押して設定変更を反映させる。

  1. Product Configuration

「Next」を押してMySQL Routerの初期設定をする。

  1. MySQL Router Configuration

デフォルト設定のまま「Finish」。

  1. Product Configuration

「Next」を押してSAmples and Examplesの初期設定をする。

  1. Connect To Server

さっきのパスワードを入力して「Check」を押すとつながるかチェックできる。
チェックできたら「Next」。

  1. Apply Configuration

「Execute」を押して設定変更を反映させる(何も変更していないが)。

  1. Product Configuration

「Next」を押す。もう初期設定するものはない。

  1. Installation Complete

「Start 〇〇」のチェックボックスにチェックが入っていると終了時にそれらが起動する。
今すぐ動かすつもりはないので外していい。
「Finish」を押すと終了。

3. 試しに動かす mysqlsh

MySQLがちゃんと動くかMySQL Shellで確かめる。
ここで作ったものを後でPythonから接続・操作する。

3.1. MySQL に接続する

MySQLをインストールしたときにMySQL Shellというものが一緒にインストールされている。
コマンドプロンプトから、

1
mysqlsh

と入力するとMySQL Shellが起動する。
こんな感じになる↓

1
2
3
4
5
6
7
8
MySQL Shell 8.0.22

Copyright (c) 2016, 2020, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Other names may be trademarks of their respective owners.

Type '\help' or '\?' for help; '\quit' to exit.
MySQL JS >

MySQL Shellが起動したら以下のコマンドでMySQLに接続する。

1
\connect root@localhost

パスワードを聞かれるのでさっき決めたパスワードを入力する。

1
2
Creating a session to 'root@localhost'
Please provide the password for 'root@localhost':

パスワードを保存するか聞かれる。
保存するならYを入力する。

1
Save password for 'root@localhost'? [Y]es/[N]o/Ne[v]er (default No):

3.2. データベースを作る

MySQL Shell起動時はJSモードになっている。
以下のコマンドでSQLモードに変更する。(JSモードのままでも書式を変えて書けば同じように動く)

1
\sql

new_dbという名前のデータベースを作成する。

1
create database new_db;

ちゃんとできているか以下のコマンドで確認する。

1
show databases;

new_dbが作られている。
それ以外にも最初からいくつかデータベースが存在している。

1
2
3
4
5
6
7
8
9
10
11
12
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| new_db |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
7 rows in set (0.0005 sec)

3.3. テーブルを作る

以下のコマンドでnew_dbを操作することを宣言する。

1
use new_db;

sampleという名前のテーブルを作る。
sampleid, name, ageの3属性を持っている

1
create table sample(id integer, name varchar(20), age integer);

ちゃんとできているか以下のコマンドで確認する。

1
show tables;

できてる。

1
2
3
4
5
6
+------------------+
| Tables_in_new_db |
+------------------+
| sample |
+------------------+
1 row in set (0.0010 sec)

3.4 データを追加する

いくつかデータを追加する。

1
2
3
insert into sample (id, name, age) values (1, "taro", 5);
insert into sample (id, name, age) values (2, "bob", 13);
insert into sample (id, name, age) values (3, "fish", 17);

ちゃんとできているか以下のコマンドで確認する。

1
select * from sample;

できてる。

1
2
3
4
5
6
7
8
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | taro | 5 |
| 2 | bob | 13 |
| 3 | fish | 17 |
+----+------+-----+
3 rows in set (0.0003 sec)

4. Python からMySQLを操作する

以下のpythonファイルを作成、実行する。

mysql_test.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import mysql.connector as mydb

# コネクションを作成
cnx= mydb.connect(
host='localhost',
port='3306',
user='root',
password='password', # さっき作ったパスワード
database='new_db' # さっき作ったデータベース名
)

# カーソルを作成
cur = cnx.cursor()

# 全てのデータを取得・表示
cur.execute("select * from sample")
rows = cur.fetchall()
for row in rows:
print(row)

# コネクションを閉じる
cnx.close()

さっき作ったデータが表示された。
接続できていることが分かる。

1
2
3
(1, 'taro', 5)
(2, 'bob', 13)
(3, 'fish', 17)

cur.execute()の中身を変えると別のSQL文を実行できる。
例えば以下の文を追加するとテーブルに新しいデータが追加できる。

1
cur.execute("insert into sample (id, name, age) values (4, 'melon', 33)")

その後、以下のコマンドで変更を反映させないとデータベースに登録されない。

1
cnx.commit()

MySQL Shellの側からselect * from sample;で確認する。

1
2
3
4
5
6
7
8
9
+----+-------+-----+
| id | name | age |
+----+-------+-----+
| 1 | taro | 5 |
| 2 | bob | 13 |
| 3 | fish | 17 |
| 4 | melon | 33 |
+----+-------+-----+
4 rows in set (0.0074 sec)

Pythonからデータベースが操作されていることが分かる。

5. コード

実験に使用したコード。

mysql_test.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import mysql.connector as mydb

# コネクションを作成
cnx= mydb.connect(
host='localhost',
port='3306',
user='root',
password='password', # さっき作ったパスワード
database='new_db' # さっき作ったデータベース名
)

# カーソルを作成
cur = cnx.cursor()

# レコードを追加
cur.execute("insert into sample (id, name, age) values (4, 'melon', 33)")
cnx.commit()

# 全てのデータを取得・表示
cur.execute("select * from sample")
rows = cur.fetchall()
for row in rows:
print(row)

# コネクションを閉じる
cnx.close()

6. 参考

https://qiita.com/valzer0/items/2f27ba98397fa7ff0d74

タグ ,

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×