【Python】SQLiteを使って情報を保管してみよう!

Pythonロゴ

情報を保管する方法としてデータベースの利用は日常よくあります。
今回は簡単に取り扱いできるSQLiteを利用した情報の読み書きを行ってみます。

SQLiteとは?

SQLite(エスキューライト)は小型・軽量・高性能なリレーショナルデータベースシステムの1つです。活用用途はスマートフォンの内部の情報保管、小規模プロジェクト、組み込みシステムに利用されています。
パブリックドメインのため自由度の高いデータベースになります。
データベースの操作はSQLを使って行うため別途勉強する必要があります。

Windowsの場合は公式サイトからインストーラにてセットアップ、Macの場合はHomebrewを利用してセットアップをおこないます。

基本操作

コネクションのオープンとクローズ

データベースに接続する際、コネクション(接続)を確立する必要があります。
下記操作にてコネクションまでを行います。データベースが存在しない場合、新規で作成も併せて行われます。
データベースは利用が終わるとクローズ(解放)を行います。クローズ忘れをするとコネクションが残りキャパシティオーバーで接続できない原因になりますので注意が必要です。

import sqlite3

db_connect = sqlite3.connect('SQLiteファイル名')
db_connect.close()

テーブルの新規作成

データベースの中にはデータを保管する表が必要になります。
プログラムの中ではカーソルを呼び出して作業する指示(SQL)を与えてコミットにて処理を実行します。

import sqlite3
db_connect = sqlite3.connect('sqlite_test.db')

# カーソル呼び出し
db_curs = db_connect.cursor()

# テーブル作成の命令をSQLにて指示
sql = 'CREATE TABLE users(id INTEGER PRIMARY KEY AUTOINCREMENT, name1 STRING, name2 STRING)'
db_curs.execute(sql)

# 実行
db_connect.commit()

db_connect.close()

IDEAエディタのDatabaseウィンドウで確認したところテーブルが作成されていました。

テーブルにデータを挿入

作成したデータベースに情報を挿入します。
挿入はSQL文の INSERT を利用します。

import sqlite3
db_connect = sqlite3.connect('sqlite_test.db')
db_curs = db_connect.cursor()

# データ挿入の命令をSQLにて指示
sql = 'INSERT INTO users(name1, name2) values ("OSAKA", "TARO")'
db_curs.execute(sql)

db_connect.commit()
db_connect.close()

IDEAエディタのDatabaseウィンドウで確認したところテーブルが作成されていました。

テーブルのデータを参照

テーブルに保存されている情報を参照します。
参照はSQL文の SELECT を利用します。

import sqlite3
db_connect = sqlite3.connect('sqlite_test.db')
db_curs = db_connect.cursor()

# データ参照の命令をSQLにて指示
sql = 'SELECT * FROM users'
db_curs.execute(sql)

# 参照データを表示
print(db_curs.fetchall())

db_connect.close()

# 結果
# [(1, 'OSAKA', 'TARO')]

その他SQL処理に関して

データベースのSQL文には上記以外にUPDATEによる上書き、DELETEによる削除などたくさん命令があります。命令の詳細は別サイトをご確認下さい。

参考 SQLの基礎を総まとめQiita

with構文でクローズ忘れ防止

以前、ファイル操作で利用した with構文 を利用する事でclose処理を省略できるようになります。
下記例は「テーブルのデータを参照」を with構文 で記述しています。

import sqlite3
from contextlib import closing

with closing(sqlite3.connect('sqlite_test.db')) as db_connect:
    db_curs = db_connect.cursor()
    sql = 'SELECT * FROM users'
    db_curs.execute(sql)

    print(db_curs.fetchall())

# 結果
# [(1, 'OSAKA', 'TARO')]

インメモリにてSQLiteを実行

SQLiteはメモリ上にデータベースを保存する事ができます。
メモリは揮発性(電源を切ると消える)ため集計処理の一時キャッシュなどに活用できます。

違いはsqlite3.connectを指定する際に :memory: の記述を入れます。

import sqlite3
from contextlib import closing

with closing(sqlite3.connect(':memory:')) as db_connect:
    db_curs = db_connect.cursor()
    sql = 'CREATE TABLE users(id INTEGER PRIMARY KEY AUTOINCREMENT, name1 STRING, name2 STRING)'
    db_curs.execute(sql)
    db_connect.commit()

サンプルプログラム

こちらの記事で作成したプログラムはGitHub環境にアップしております。
下記からダウンロードいただけます。

参考 sqlite.py スクリプトGitHub python-beginner