データベースって難しそう。。。
そう思っていてなかなか手を出せずにいたのですが、意外にも簡単でした。笑
ちゃんと言うと「Excel のようにデータを保存するだけの存在」と割り切れば、簡単に扱えます。
過去の自分と同じように “データベース” という言葉ですぐに “コワイ!!” 思っている方に、ぜひその簡単さ共有したいと思います。。
いくつかデータベースありますが、その中でも SQLite は軽量で 1 データベース 1 ファイルとして生成されますので、大変扱いやすいデータベースです (拡張子はなんでもいいので、本記事では *.sqlite としてます)。また MySQL などのデータベースと違って常駐プロセスがないのも特徴の 1 つです。
なので、とてもとっつきやすいデータベースです。
それでは、実際に見ていきましょ!
環境構築
こちらが実際に利用した環境になります。
動作環境
- OS: Windows 10 x64
- Python: 3.6.5
あった方が良い知識
- SQL 文
データベースにアクセスするには SQL 文の知識が必要です。
本記事では簡単なデータベース操作しかしていませんので、そのまま読み進めても問題ありません。「こんな風にするのね」という感じでわかると思います。
任意: SQLite のインストール方法
Python には標準で sqlite3 モジュールがついていますので、Python を通して SQLite データベースの作成・閲覧・更新・削除ができます。
ただ、Python 使わずにコマンドプロンプトからアクセスするには、SQLite モジュールをダウンロード & インストールする必要があります。いちいち Python コードを書いて内容を確認したくないという場合にオススメです。
Windows の場合
- 本家サイトダウンロードページ からモジュール取得
- “Precompiled Binaries for Windows” から “sqlite-tools-*” をダウンロード
- ダウンロードした ZIP を解凍する
- SHA1 でハッシュ値を取得し、改ざんされていないか確認しましょう。
- Windows の場合、PowerShell から “Get-FileHash -Algorithm SHA1 <ファイル名>” で確認できます。
- 解凍後、任意の場所に移動しパスを通す
- 私は “C:\SQLite” 配下に EXE を移動させ、環境変数に “C:\SQLite” を追加 (= パスを通す) しました。
Mac OS の場合
- インストール Homebrew
- HP にも書かれていますが /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” を実行
- Mac へのログインパスワードをタイプしてインストール
- ターミナルから “brew install sqlite3” をタイプし、SQLite 3 をインストール
データベースへの接続、内容確認
簡単ではありますが、こちらがインストールした SQLite からデータベースの中身を確認する方法です。
- コマンドプロンプト/ターミナルから
sqlite3 database_name.sqlite
で指定したデータベースに入ります。 .table
を実行することで、作成されたテーブルのリストが表示されます。SELECT * FROM table_name;
という SQL 文でテーブルの中身が見れます。(SQL 分の最後に セミコロン “;” を忘れずに!! ).quit
を実行することで、コマンドプロンプトに戻れます。
次章から、実際にデータベースを生成していきますので、その際にお試し下さい。
早速 SQLite を使ってみる
それでは、実際にデータベースを作成、コントロールしましょ!
空のデータベース作成
データベースの作成方法は 2 種類あります。
- ファイルを生成する方法
conn = sqlite3.connect('database_name.sqlite')
- メモリ上に生成する方法
conn = sqlite3.connect(':memory:')
#lesson.py
import sqlite3
# conn = sqlite3.connect('database_name.sqlite') or
conn = sqlite3.connect(':memory:')
conn.close()
ファイル生成を選択した場合、”database_name.sqlite” という名前のファイルが生成され、Python 処理が終了してもデータがそのファイルに残っていますので、後日そのデータベースを利用した処理が可能です。バックアップもこのファイルをどこかにコピペするだけで OK です。
ちなみにですが、拡張子はあってもなくても良いのですが、慣習的に DB が何か分かるように “.sqlite” を付けます。
メモリ上の生成を選択した場合、Python 処理が終了するとそのデータベースも消えますので、今回のような練習用に向いています。
テーブルを作成、更新、削除、一覧表示
基本的には下記に集約されます。
-
conn = sqlite3.connect(''database_name.sqlite'')
で指定したデータベースにアクセスします。なければ、新規に生成します。curs = conn.cursor()
でデータベース操作ができるようにします。curs.execute("SQL 文")
で SQL を実行します。conn.commit()
実行した SQL は Commite しなければ、保存されません。curs.close()
処理が終われば、処理操作をクローズ。
-
conn.close()
データベースもクローズする。
curs.execute("SQL 文")
以外で、SQL 分を実行しテーブルを作成、更新、削除、一覧表示させているだけですので、色々な SQL 文をお試し下さい。
以下が、”persons” テーブルを作成し、各種 “name” を作成、変更・更新、削除しているコードになります。
import sqlite3
# Create database in memory
conn = sqlite3.connect(':memory:')
curs = conn.cursor()
# Create a table
curs.execute("CREATE TABLE persons(id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING)")
# Insert a row of data
curs.execute("INSERT INTO persons(name) values('Mike')")
curs.execute("INSERT INTO persons(name) values('John')")
curs.execute("INSERT INTO persons(name) values('Will')")
# Update data
curs.execute("UPDATE persons SET name = 'Michael' WHERE name = 'Mike'")
# Delete data
curs.execute("DELETE FROM persons WHERE name = 'Michael'")
# Save (commit) the changes
conn.commit()
# Browse inserted data
curs.execute("SELECT * FROM persons")
print(curs.fetchall())
curs.close()
conn.close()
上記コードを実際に書いたり、コピペして編集したりするとより知識が深まります。
ぜひお試しください。
まとめ
いかがでしたでしょうか?
データベースと聞いて、サーバーを立ててどうのこうのと大変なイメージがあったのですが、意外とあっさりしていて驚きました。
一先ずデータベースの使い方はわかりましたので、次は SQLAlchemy というサードパーティのツールを使って、データベースに依存しないコードが書いたり、ウェブフォームに入力された情報をデータベースをに登録するなどを試したいと思います。
それでは、また!