Pythonでデータベース(DB)を作成・操作できる「sqlite3」の使い方を分かりやすく解説する

この記事は約9分で読めます。

 

Pythonからデータベースを操作する

 

今回はPythonのプログラム上からデータベース(DB)を操作する方法を解説していきます。基本的にデータベースは他のプログラミング言語の上からデータベースにアクセスするのが一般的です。データベースを操作するプログラミング言語であるSOLの基本的な使い方は↓で書いています。

 

 

→SQLの基本的な構文

 

 

例えば自分の場合だと仮想通貨の価格を定期的に取得したそれをデータベースに保存するという処理をするためにPythonのプログラム上でデータベースを操作しています。

 

他にもDjangoやFlaskなどでウェブアプリケーションを構築する際にもデータベースは必須になるので、Pythonに限らず他のプログラミング言語でWebアプリケーションなどを作る場合でもSQLによるデータベースの操作スキルは必須なので、データベース(DB)の理解はエンジニアになる上で絶対に必要です。

 

データベースを操作するプログラミング言語はいくつか存在しますが、基本的に「SQL」・「Oracle」というプログラミング言語で操作します。そしてPythonなどの他のプログラミング言語で書かれたコードからデータベース(DB)を操作する場合は、そのコード上でSQLのコマンドを記述し、そこからデータベース(DB)を操作するのが一般的です。

 

そして、Pythonの場合であればSQLの簡易版であるsqliteをPython上から実行できるsqlite3というライブラリを使うことで。python上でデータベースを操作することができます。

 

SQLite(エスキューライト)は、ファイルベースのデータベースエンジンでファイルだけあれば動作しますが、データベースを丸ごとロックすることしかできないので、複数人が同時接続するとパフォーマンスが落ちてしまいます。加えて発行できるSQLも他のデータベースエンジンに比べて制限があり、複雑だったり大規模なデータベースが必要な場合なケースには向いていないわけですが、SQLはインストール不要ですぐに使えるというメリットはあるので、小さなwebサービスを立ち上げる際なんかはサクッと使えるので超便利です

 

 

sqliteでPythonからデータベースを操作する

 

まずはコマンドライン(アナコンダプロンプト)でsqliteをインストールします。Anaconda環境だとデフォルトで入っているかもしれませんので、まず「JupyterNotebook」かなんかで「import sqlite」を実行して確認してみてください。

 

 

 

 

 

#sqliteのインストール
$pip install sqlite

 

 

インストールが終わったらインポートしてみます。

 

 

##sqlite3をインポートする
import sqlite

 

 

データベースに接続して.dbファイルとデータテーブルの作成する

 

基本的にデータベース(DB)の仕組みはまず大元の.dbを作り、その中にデータの種類ごとにテーブルを作成し、そこにデータを格納していくという形になるので、まずはデータを格納する大元である.dbファイルを作ります。自分の場合はユーザー名のディレクトリに新しく「python_sqlite3」というフォルダを新規に作ってそこで作業しています。

 

 

パスはこんな↓のような感じです。

C:\Users\ユーザー名\python_sqlite3

 

 

まずこのフォルダの中に「sample.py」と「sample.db」を作ります。pyファイルを「sqlite3.py」にすると「AttributeError: module ‘sqlite3’ has no attribute ‘connect’」のエラーが出るので止めましょう。

 

 

 

 

そしてその中にテーブルを作っていくわけですが、基本としてはテーブルの数が増えると処理速度が遅くなるので、テーブルはなるべく少なめにした方がいいでしょう。プログラミング全般に言えることですが、シンプルかつ分かりやすくを意識していきましょう。

 

またsqlite3でのデータベースの操作はpyファイルをコマンドプロンプト(アナコンダプロンプト)で実行した方がいいと思います。というのも、jupyternotebookやSpyderなどのAnaconda経由で操作すると、コマンドがちゃんとデータベースに反映されていないことがあります。(Win10 64Bit)

 

 

<sqlite3.pyの中身>

import sqlite3

# データベースファイルのパス
dbpath = 'sample.db'

# データベースの作成・接続とカーソル生成
c = sqlite3.connect(dbpath)
cur = c.cursor()

# データテーブルを作成する
cur.execute("create table sample_table(id integer primarykey auto_increment , name text)")

 

 

2行目のcはconnectionのcです。人によってはconnectionとしている人もいます。cの方が後々コードの文字数が減ります。sqlite3の使い方はDBのパスを指定して接続し、そこからcur.execute()で引数にデータベースのコマンドを入れて実行という流れになっています。データベースのコマンドはダブルクオテーション(””)で囲います。

 

今回はsample_tableというデータテーブルを作ります。テーブルの作成はCREAT文で出来ます。テーブルとdbファイルは別物で、sample.dbというデータベースファイルの中にsample_tableというデータテーブルを作り、そこにデータを挿入していくイメージです。

 

テーブルの中身は無難にIDとNameにします。IDは数字型で同じものがあったら困るので、引数にintegerとprimarykeyを指定しておきます。データ型とプライマリーキーの話はsqliteではなくSQLの仕様の話です。

 

これをアナコンダプロンプト上から以下のコマンドで実行します。実行する前にcdでディレクトリを変更しておいてください。ディレクトリが間違っていると「 No such file or directory」というエラーになります。

 

 

cd python_sqlite3
C:\Users\(自分のユーザー名)\python_sqlite3>python sample.py

 

 

これで、データベースとテーブルができたはずなので、中身を確認していきます。

 

 

#データベースファイルを起動してアクセスする
$sqlite3 sample.db

 

 

 

こんな感じで

 

 

SQLite version 3.24.0 2018-06-04 19:24:41

Enter “.help” for usage hints.

sqlite>

 

 

とでていたら成功です。これで今はsample.dbにアクセスしている状態になっているので、次はsample.dbの中に作成されているはずのデータテーブルを確認してみます。dbファイルの中にあるデータテーブルの確認は「.tables」で出来ます。

 

 

#テーブルの確認する
sqlite> .tables

 

実行して以下のようになっていれば成功です。

 

 

 

これでsample.dbの中にデータテーブル(sample_table)が作成されていることを確認できたので、次はINSERT文を使って、データテーブルにデータを追加していきます。

 

 

INSERT文でテーブルにデータを追加する

 

次は先ほど作成したsample.dbの中にあるsample_tableの中にINSERT文でデータを追加したいと思います。INSERT文での追加は以下のように行います。

 

 

#テーブルにデータを追加する
sqlite> insert into sample_table(id,name) values(1,'bitcoin');

 

 

この処理でsample_tableの中に1とBitcoinというデータが追加されたはずなので中身を確認します。テーブルのデータの確認はSELECT文で行うのが一般的です。

 

 

#sample_tableの中身を確認する
$select * from sample_table;

 

 

実行すると以下に返されます。

 

 

sqlite> select * from sample_table;
1|bitcoin

 

 

コマンドプロンプト上でsqlite3を終了する場合は以下のコマンドで実行できます。

 

 

#sqlite3を終了する
sqlite> .exit

 

 

 

終わり

 

以上がsqlite3からPython上からのデータベースの操作方法になります。SQLの文法については「SQLの書き方のツボとコツがゼッタイにわかるドリル本」という本が初心者向けで非常に分かりやすかったので紹介しておきます。

 

 

 

 

 

 

次はここに実際のビットコインの価格データをAPIを通して取得して、その値をデータベースに保存する処理を行っていきたいと思います。

 

 

 

 

 

コメント

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