自動販売機のシステムを作ってみる part3 -pythonからDBを作成-

以前にDBを作成するSQLファイルを作成したが、pythonからSQLファイルの実行ができなかった。

https://qiita.com/H_T_6221/items/a7055bf9d058791849a3

今回はDBを作成するコードをpythonで実装する。

## 実装
大きく3つのパートに分けて実装していく。

### 1. データベース作成
vending_machineという名前のデータベースを作成する。
<details>
<summary>実装</summary>

```create_db.py
import mysql.connector

def create_database():
  print('START CREATE DATABASE')

  mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password="root",
    auth_plugin="mysql_native_password"
  )

  mycursor = mydb.cursor()

  mycursor.execute("CREATE DATABASE vending_machine")

  print('-------------------------')
  mycursor.execute("SHOW databases")
  for x in mycursor:
    print(x)
  print('-------------------------')

  print('END CREATE DATABASE')
```
</details>

### 2. テーブル作成
以前に作成したDB設計に則り、テーブルを作成する。

https://qiita.com/H_T_6221/items/833a476007ef6754f6b5

<details>
<summary>実装</summary>

```create_table.py
import mysql.connector

def create_table():
  print('START CREATE TABLES')

  mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password="root",
    database="vending_machine",
    auth_plugin="mysql_native_password"
  )

  mycursor = mydb.cursor()

  mycursor.execute("CREATE TABLE item_info(id INT AUTO_INCREMENT, name TEXT, code TEXT, type TEXT, PRIMARY KEY (id)) DEFAULT CHARSET=utf8")
  mycursor.execute("CREATE TABLE item_stock(id INT AUTO_INCREMENT, code TEXT, stock INT, PRIMARY KEY (id)) DEFAULT CHARSET=utf8")
  mycursor.execute("CREATE TABLE item_price(id INT AUTO_INCREMENT, code TEXT, price INT, PRIMARY KEY (id)) DEFAULT CHARSET=utf8")
  mycursor.execute("CREATE TABLE temp_type(id INT AUTO_INCREMENT, code TEXT, name TEXT, PRIMARY KEY (id)) DEFAULT CHARSET=utf8")
  mycursor.execute("CREATE TABLE money_stock(id INT AUTO_INCREMENT, money INT, name TEXT, stock INT, PRIMARY KEY (id)) DEFAULT CHARSET=utf8")
  mycursor.execute("CREATE TABLE purchase_history(id INT AUTO_INCREMENT, code TEXT, money INT, PRIMARY KEY (id)) DEFAULT CHARSET=utf8")

  print('-------------------------')
  mycursor.execute("SHOW tables")
  for x in mycursor:
    print(x)
  print('-------------------------')

  print('END CREATE TABLES')
```
</details>

### 3. データ作成
money_stockテーブルに金額の情報を登録する。

<details>
<summary>実装</summary>

```money_stock_table.py
import mysql.connector

def create_money_stock_table():
  print('START CREATE MONEY STOCK TABLES')

  mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password="root",
    database="vending_machine",
    auth_plugin="mysql_native_password"
  )

  mycursor = mydb.cursor()

  mycursor.execute("INSERT INTO money_stock(money, name, stock) VALUES (10, '10円', 0)")
  mycursor.execute("INSERT INTO money_stock(money, name, stock) VALUES (50, '50円', 0)")
  mycursor.execute("INSERT INTO money_stock(money, name, stock) VALUES (100, '100円', 0)")
  mycursor.execute("INSERT INTO money_stock(money, name, stock) VALUES (500, '500円', 0)")
  mycursor.execute("INSERT INTO money_stock(money, name, stock) VALUES (1000, '1000円', 0)")
  mycursor.execute("INSERT INTO money_stock(money, name, stock) VALUES (5000, '5000円', 0)")
  mycursor.execute("INSERT INTO money_stock(money, name, stock) VALUES (10000, '10000円', 0)")

  print('-------------------------')
  mycursor.execute("SELECT * FROM money_stock")
  myresult = mycursor.fetchall()
  for x in myresult:
    print(x)
  print('-------------------------')

  print('END CREATE TABLES')
```
</details>

## 前回
https://qiita.com/H_T_6221/items/a7055bf9d058791849a3