【DB】ラズベリーパイにDB(MariaDB)を入れて手を動かす

スポンサーリンク
tech系(Linux)
スポンサーリンク

こんちわー。今回はラズベリーパイがせっかくあるのでデータベース(以下DB)を入れてみてみたいと思います。

今後、DBのコマンドなどを学ぶために使っていければいいかと考えています。

今回の最終ゴールとしてはDBをラズベリーパイに入れた後、スクレイピングで株価のデータをインターネットから引っ張ってきてDBに入れるというところまでになります。今回はDBをラズベリーパイに入れるところまでの実装を行おうと思います。

ラズベリーパイにMariaDBをセッティングする

MariaDBを入れる

今回使うDBのソフトはMariaDBというOSSです。OSSなのでもちろん無料で使えます。このDBが無料で使えるの!?ぐらいのことができるかと思いますので非常にコスパが良いです。それではやっていきましょう。

mariadbをインストール

$ sudo apt install mariadb-server

MariaDBを起動する

$ sudo systemctl start mariadb

MariaDBが起動したかを確認する。Activeのところがactive (running)になってるかを確認します。

$ sudo systemctl status mariadb

DBの作成

DBを作成していきます。

MariaDBプロンプトに入る

$ sudo mysql -u root

DBを作成します。今回はスクレイピングで株価を取得しDBの中にデータを入れようと考えているのでDBの名前はkabukaにします。

MariaDB [(none)]> CREATE DATABASE kabuka;

scraping_kabukaユーザを作成し、「kabuka」DBの権限を割り当てます。

IDENTIFIED BYの後のXXXXXXXXXXには各自で決めたユーザパスワードを入れてください。

MariaDB [(none)]> GRANT ALL PRIVILEGES ON kabuka.* to scraping_kabuka@localhost IDENTIFIED BY 'XXXXXXXXXX';

これで一旦、設定終了exitでMariaDBプロンプトから抜け出します。

DBへアクセスするpythonコードを作成する

pythonコードを書く際にimportするmariadbモジュールをインストールします。

$ pip3 install mariadb

DBにテスト接続してみます。以下のpythonコードを用意して実行してみます。passwordのところは上記でユーザを作成したところで設定したパスワードを入れてください。実行して何も表示されなければ接続は成功しています。

以下のコードをコード①とします。

import mariadb

dbconfig = {
        "host": "localhost",
        "user": "scraping_kabuka",
        "password": "XXXXXXXXXX",
        "database": "kabuka"
}

conn = mariadb.connect(**dbconfig)

コードを書くたびにDBの接続情報をいちいち書くのは面倒だし、ソースコードの流出してしまった場合への対策として、上記で作成したpythonコードファイルが置いてあるディレクトリと同じディレクトリに以下の記述でconfig.iniを作成します。【パスワード】は上記で設定したXXXXXXXXXXにあたるパスワードの値になります。

[MySQL]
host = localhost
user = scraping_kabuka
password = 【パスワード】
database = kabuka

このconfig.iniの設定を読み込むためコード①を以下のように修正します。

import mariadb
import configparser

config = configparser.ConfigParser()
config.read("【config.iniがある場所への絶対パス】/config.ini")
host = config.get("MySQL", "host")
user = config.get("MySQL", "user")
password = config.get("MySQL", "password")
database = config.get("MySQL", "database")


dbconfig = {
        "host": host,
        "user": user,
        "password": password,
        "database": database
}

このコードにDBのテーブルを作成する部分のコードを追加します。kabu_tableというテーブルを作成するという意味のコードです。

import mariadb
import configparser

config = configparser.ConfigParser()
config.read("/home/appare99/scripts/db/config.ini")
host = config.get("MySQL", "host")
user = config.get("MySQL", "user")
password = config.get("MySQL", "password")
database = config.get("MySQL", "database")


dbconfig = {
        "host": host,
        "user": user,
        "password": password,
        "database": database
}

conn = mariadb.connect(**dbconfig)

cursor = conn.cursor()
query = """CREATE TABLE kabu_table (
           id INT NOT NULL AUTO_INCREMENT,
           title VARCHAR(512) NOT NULL,
           bookmark INT NOT NULL,
           url VARCHAR(512) NOT NULL,
           created_at DATE NOT NULL,
           PRIMARY KEY (id)
        )"""

cursor.execute(query)

一度ここまで作成したらこのpythonコードを実行します。(特にエラーなどが出なければ成功)

確認

さっき作成したユーザ(今回だとscraping_kabuka)でMariaDBプロンプトに入ります

$ mysql -u scraping_kabuka -p

DBを切り替えます。

MariaDB [(none)]> use kabuka;
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
MariaDB [kabuka]>

DBのkabukaでテーブルであるkabu_tableを確認します。

MariaDB [kabuka]> DESCRIBE kabu_table;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| title      | varchar(512) | NO   |     | NULL    |                |
| bookmark   | int(11)      | NO   |     | NULL    |                |
| url        | varchar(512) | NO   |     | NULL    |                |
| created_at | date         | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
5 rows in set (0.004 sec)

まとめ

今回はラズベリーパイでテーブル作成していきました。次回は株価のデータをこのテーブルに入れていくことをやっていきたいと思います。

タイトルとURLをコピーしました