読者です 読者をやめる 読者になる 読者になる

Iruca Log

東京で暮らすWeb系エンジニアが日々感じたこと

SNSでフォローする!

SQLiteを使ってローカルにDB, テーブルを作ってデータを出し入れする

こんにちは、イルカです。

webから収集してきた情報なんかをとりあえず手軽にローカルのDBにでも保存すっか…じゃあsqlite使おう、と思うことが多いのですが、
いつもやり方を忘れるので備忘録的にここに書いておきます。

テーブル定義

まずテーブル定義の仕様を決めます。
僕の好きなものを保存するテーブルにします。

column_name data_type index memo
user_id text primary key ユーザを識別するID文字列
name text primary key 食べ物などの名前文字列
extent integer どれくらい好きかの程度を表す整数値


SQLiteで使えるデータ型は以下を参照。
SQLiteのデータ型 | SQLite


DBとテーブル作成

DBとテーブルをpythonのsqlite3モジュールを使って作ってみます。
SQLiteのDBのファイルはpythonスクリプトを実行したディレクトリにできるようです。

create_db_and_table.py

#!/usr/bin/python
#-*- coding:utf-8 -*-


# python2.7標準で入ってるはず
import sqlite3

db_name = "iruca_sample.db"
table_name = "favorite"
sql = "CREATE TABLE %s(user_id text, name text, extent integer, PRIMARY KEY(user_id, name))" % ( table_name )

print sql

#ローカルのDBへの接続取得
connection = sqlite3.connect(db_name)

#カーソル取得
cursor = connection.cursor()

#SQL実行
cursor.execute( sql )

#コミット
connection.commit()

#接続を閉じて終了
connection.close()

実行してテーブルを作っておきましょう。

[root@hoge hatena]# python create_db_and_table.py
CREATE TABLE favorite(user_id text, name text, extent integer, PRIMARY KEY(user_id, name))

これでDBとテーブルができました。


データの挿入と確認

本当にテーブルができたのか、テーブルからデータを出し入れして確認してみましょう。

check_table.py

!/usr/bin/python
#-*- coding:utf-8 -*-


import sqlite3

db_name = "iruca_sample.db"
table_name = "favorite"
insert_sql = """
INSERT INTO %s
VALUES
("iruca21", "oyakodon", 100),
("iruca21", "kafun", -1000000),
("kujira16", "serori", -10)
""" % table_name

select_sql = """
SELECT user_id, name, extent FROM %s
WHERE user_id="iruca21"
""" % table_name

print insert_sql
print select_sql

#ローカルのDBへの接続取得
connection = sqlite3.connect(db_name)

#カーソル取得
cursor = connection.cursor()

#データ挿入SQL実行
cursor.execute( insert_sql )

#コミット
connection.commit()

#データ取得SQL実行
cursor.execute( select_sql )

#結果を表示
result = cursor.fetchall()
print "------"
for row in result:
        print row[0], row[1], row[2]

#接続を閉じて終了
connection.close()


では、上記のスクリプトを実行して確認しましょう。

[root@hoge hatena]# python check_table.py

INSERT INTO favorite
VALUES
("iruca21", "oyakodon", 100),
("iruca21", "kafun", -1000000),
("kujira16", "serori", -10)


SELECT user_id, name, extent FROM favorite
WHERE user_id="iruca21"

------
iruca21 kafun -1000000
iruca21 oyakodon 100


うん、満足満足。