データベースについて

どうもおはこんばんにちは。マタキチです。
最近職場に新人さんがいらっしゃいました。すごいスピードで増えてますねこの界隈の人々。そのたびに後輩かーっつって。また一つ年をとった気分だなーっつって。そんなこんなで後輩くんと日夜奮闘している今日この頃。

pythonでスクレイピングの勉強をしているので記述していこうかと思います。忘備録的な意味合いが強いのであしからず。また、間違い等ご指摘いただけると嬉しいです。

データベース(DB)とはなんぞや

はてさて、インフラの方なんかは「DB整備」なんて言葉をよく聞くんではないでしょうか。マタキチも聞きます。さてこのDBですがCSVやJSONの形式で保存したらいいじゃないという意見も聞こえそうですが、データが大量になったり、複雑になるようならDBを使用したほうが便利です。メリットとしては次のような利点があります。

①, データの一元管理
②, 様々なデータを関連付けて格納できる
③, 重複データを認めないなど制約をつけてデータを格納できる
④, データの一貫性を確保できる
⑤, 複数人でデータを共有できる
⑥, データへの同時アクセスを処理できる
⑦, 大量のデータでも、少しづつ読み出したり、並べ替えたりできる

これだけじゃない気もしますがこのくらいにしときます。特に、複数プログラムで同じデータを覗きに行く時なんかはDBを使用した方がいいでしょう。

データベース(DB)の種類

DBにはいくつか種類があります。例えば、「MySQL」「PostageSQL」「SQLlite」「Microsoft SQL Server」などなど。それぞれDBに特徴がありますのでどれを選ぶかは調べてみてください。今回はオープンソースのDBとしてよく使われるMySQL、SQLlite、NoSQLのTinyDBなどについてです。

DB構造

DBの主要構造は意外と似通っています。中には複数のテーブルがあります。テーブルとはExcelのシートにあたるものです。ようは行と列を持つ二次元データですね。行のことをレコード、列のことをカラムと呼びます。Excelと違う点としてはテーブルどうしを連結させることができる点と、大容量データを処理できる点です。

画像1

MySQLを使ってみる

Pythonから接続してDBを操作してみます。その前に環境構築をしましょう。cmdで次のコマンドを使います。

#MySQLのインストール
$ sudo apt-get install -y mysql-server

#mysqlclientのインストール
$ sudo apt-get install -y libmysqlclient-dev
$ pip3 install mysqlclient

MySQLの実行と停止は次のコマンドです。

# 起動
$ service mysql start
$ sudo mysql -u root
# パスワードを入力
$ test-password
# 「test」というなのテーブルの作成
$ mysql> CREATE DATABASE test;

#このままだとrootユーザにパスワードが設定されていないので設定
$ sudo mysqladmin -u root password 'test-password'

PythonでMySQLを操作しよう

準備はこれくらいにして、いよいよいじります。

▽sql.pyというファイルを作成

#ライブラリーのインポート
import MySQLdb

#MySQLに接続する
conn = MySQLdb.connect( user = 'root', passwd = 'test-password', host = 'localhost', db = 'test' )

#カーソルの取得
cur = conn.cursor()

#テーブルの作成
cur.execute( 'DROP TABLE IF EXISTS items' )
cur.execute( '''CREATE TABLE items ( item_id INTEGER PRIMARY KEY AUTO_INCREMENT , name TEXT , price INTEGER ) ''' )

#データの挿入
data = [('BANANA' , 300) , ('Mango', 640) , ('Kiwi', 260)]
for i in data:
    cur.execute( "INSERT INTO items( name, price ) VALUES(%s, %s)", i )

#データの抽出
cur.execute(" 《ラインマーカー》 SELECT FROM items 《ラインマーカー》")
for row in cur.fetchall():
    print(row)

これをcmdから実行すると。

$ python3 sql.py
(1, 'BANANA', 300)
(2, 'Mango', 640)
(3, 'Kiwi', 260)

ちゃんとテーブルが作成されていて、データがインサートされていました。

まとめ

今回のOSはUbuntuを使用しています。マタキチのデスクトップの仮装環境がUbuntuだからです。macOSとかだとたぶん微妙に違うんじゃないかなと思いますのでそれはまたやりたいと思います(Homebrewとか使うので)。とはいえ、DBの利点、環境構築はすごく勉強になりました。PostageSQLでも使ってみようっと。。。。。


この記事が気に入ったらサポートをしてみませんか?