2014年6月29日日曜日

[Python][SQLite]使い方

Python 2.5 から SQLite3 が標準で使えるようになっている。
# -*- coding: utf-8 -*-
import sqlite3

needCommit = 0

# Database を開く
if needCommit == 1:
    con = sqlite3.connect("data.db");
else:
    con = sqlite3.connect("data.db", isolation_level=None); # Commit 不要

# Table 作成
sql = u"CREATE TABLE test(ID INT PRIMARY KEY, NAME TEXT NOT NULL);"
con.execute(sql)

# データ登録
sql = u"INSERT INTO test(ID, NAME) values (0, 'aaa');"
con.execute(sql)

# データ登録 その 2
sql = u"INSERT INTO test(ID, NAME) values (?, ?);"
con.execute(sql, (1, "bbb"))
con.execute(sql, (2, "ccc"))

if needCommit == 1:
    con.commit()

# レコード取得
c = con.cursor()
c.execute("SELECT * FROM test")
for row in c:
    print row[0], row[1]

# Database を閉じる
con.close();
実行結果
> python sqlite.py
0 aaa
1 bbb
2 ccc
各処理を関数化、テーブルが作成済みの場合は最初に drop する処理を追加
# -*- coding: utf-8 -*-
import sqlite3

# Database を開く
def connectDb():
    print "Connect DB"
    con = sqlite3.connect("data.db", isolation_level=None);
    return con

# Table 作成
def createTable(con, name):
    print "Create table";
    sql = "CREATE TABLE %s(ID INT PRIMARY KEY, NAME TEST NOT NULL);" % name
    con.execute(sql)

# データ登録
def addData(con, id, name):
    print "Add data (%d %s)" % (id, name)
    sql = "INSERT INTO test(ID, NAME) values(%d, '%s');" % (id, name)
    print sql;
    con.execute(sql)

# 全レコード表示
def showAllRecord(con):
    c = con.cursor()
    c.execute("SELECT * FROM test")
    for row in c:
        print row[0], row[1]

# Database を閉じる
def closeDb(con):
    print "Close database"
    con.close()

# テーブル一覧表示
def showAllTables(con):
    c = con.cursor()
    c.execute("SELECT NAME FROM sqlite_master WHERE type='table'")
    for row in c:
        print row[0]

# テーブル作成済みか確認
def alreadyCreatedTable(con, name):
    c = con.cursor()
    c.execute("SELECT NAME FROM sqlite_master WHERE type='table'")
    for row in c:
        if row[0] == name:
            print "Found %s" % name;
            return 1
    return 0

# Drop table
def dropTable(con, name):
    print "Drop table %s" % name
    sql = "DROP TABLE %s;" % name
    con.execute(sql)

# メイン処理
con = connectDb()
showAllTables(con)
if alreadyCreatedTable(con, 'test') == 1:
    dropTable(con, 'test')
    createTable(con, 'test')

showAllTables(con)
alreadyCreatedTable(con, 'test')

addData(con, 0, 'aaa')
addData(con, 1, 'bbb')
addData(con, 2, 'ccc')

showAllRecord(con)
closeDb(con)
実行結果
> python sqlite2.py
Connect DB
Create table
test
Found test
Add data (0 aaa)
INSERT INTO test(ID, NAME) values(0, 'aaa');
Add data (1 bbb)
INSERT INTO test(ID, NAME) values(1, 'bbb');
Add data (2 ccc)
INSERT INTO test(ID, NAME) values(2, 'ccc');
0 aaa
1 bbb
2 ccc
Close database

> python sqlite2.py
Connect DB
test
Found test
Drop table test
Create table
test
Found test
Add data (0 aaa)
INSERT INTO test(ID, NAME) values(0, 'aaa');
Add data (1 bbb)
INSERT INTO test(ID, NAME) values(1, 'bbb');
Add data (2 ccc)
INSERT INTO test(ID, NAME) values(2, 'ccc');
0 aaa
1 bbb
2 ccc
Close database

0 件のコメント:

コメントを投稿