ファイル形式のデータベース SQLite を Python から触ってみます。Python には標準で sqlite3 というモジュールが付いているので特に何かをインストールする必要はありません。
テーブルの作成
まずテーブルを作ってみます。
import sqlite3
DATABASE = 'sample.db'
conn = sqlite3.connect(DATABASE)
def create_table():
sql = '''CREATE TABLE IF NOT EXISTS apps
(id INTEGER PRIMARY KEY,
app_url TEXT,
app_name TEXT,
store_url TEXT)'''
conn.execute(sql)
conn.commit()
# conn.close()
sample.db というファイルでデータベースを作り、 apps というテーブルに id, app_url, app_name, store_url というカラムを設定します。データベースのファイルは予め作っておく必要はなく、接続しようとして存在していなければ新規に作成してくれます。
データの登録
さっそくデータを登録してみます。
def put_data4(dict):
with conn:
conn.execute('INSERT INTO apps VALUES (null, :app, :name, :url)', dict)
# conn.close()
sampledata4 = {'app': 'http://www.forest.impress.co.jp/library/software/mery/',
'name': 'Mery',
'url': 'http://www.haijinboys.com/'}
辞書型のデータを受け取ってデータベースに登録する関数を定義します。SQL の中で VALUES のあとに括弧でプレースホルダを設定して、辞書のデータ dict を渡します。プレースホルダの書き方は 2 種類あって上記のとおり辞書のキーと合致するように名前付きのラベルを設定するやり方と、もうひとつは (?, ?, ?, ?) とクエスチョンマークで書いてそこにリストかタプルでデータを渡すやり方があります。
リスト内のデータの順序を気にする必要がなくなるので辞書型でデータを渡す方がプログラムの可読性は高くなるような気がします。ただ、このプレースホルダの並び (null, :app, :name, :url) は、テーブルのカラムの並びに合わせることになります。名前の一致が意味を持つのはカラム名とではなく渡すデータとの話ですね。
データの読み出し
def read_data():
cur = conn.execute('SELECT * FROM apps')
apps = [app for app in cur.fetchall()]
for i in apps:
print(i)
# conn.close()
データを読むにはカーソルオブジェクトの fetchall() メソッドを使って、リストが返るのでそれを表示させれば OK でした。