Python SQLite3 を操作する(テーブル作成からデータ登録、読み出し)

ファイル形式のデータベース 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 でした。