Pythonで使う(SQLiteを学ぶ_21))

SQLiteを学んでいこうという連載の21回目です。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、トリガー機能の解説でした。トリガー機能をうまく利用できれば、信頼性の高いシステムが構築できそうです。

今回は趣向を変えて、PythonからSQLiteを使ってみようと思います。

Pythonで使う

この連載の初回でもお話ししましたが、この連載はAnaconda経由でインストールされたSQLiteを中心に書いています。そして、SQLitePythonから呼び出して使うことができます。どのようして使うかというと、PythonにはSQLiteを使うためのモジュール(sqlite3)が標準で用意されているんですね。

Pythonのコード

それではPythonのサンプルコードをご紹介します。

データベースの作成(または開く)

まずはデータベースファイルを開くコードです。ファイル名を指定して開きます。該当ファイルがない場合にはファイルを作成します。

# モジュールをインポート
import sqlite3

# db_sample.dbを開く(無ければ作成する)
dbname = r'C:\Work\db_sample.db'
conn = sqlite3.connect(dbname)

# データベースを閉じる
conn.close()

データベースを開くには、sqlite3モジュールのconnect関数を使います。connect関数は、データベースとの接続(connection)オブジェクトを返します。接続を閉じるには、connectionオブジェクトのcloseメソッドを使用します。

テーブルの作成

続いてテーブルの作成です。

# sqliteを操作するカーソルを作成
conn = sqlite3.connect(dbname)
cur = conn.cursor()

# テーブルを作成
cur.execute('CREATE TABLE sample(id INTEGER,name TEXT,age INTEGER)')

# 設定を確定して閉じる
conn.commit()
cur.close()
conn.close()

SQLiteでテーブルを作成するには、SQL文の「CREATE TABLE」を使えば良かったんですよね。PythonSQL文を実行するにはcursor(カーソル)オブジェクトを使用します。カーソルとはデータベース内のレコードを処理するための仕組みです。 connectionオブジェクトのcursor関数は、cursorオブジェクトを返します。

SQL文の実行は、cursorオブジェクトのexecuteメソッドでSQL文を指定して行います。これでテーブルができますので、connectionオブジェクトのcommitメソッドで変更を確定します。

データの登録

作成したテーブルにデータを登録してみましょう。

conn = sqlite3.connect(dbname)
cur = conn.cursor()

# データを設定
cur.execute('INSERT INTO sample VALUES(1,"TANAKA",25)')
cur.execute('INSERT INTO sample VALUES(2,"YAMADA",30)')
cur.execute('INSERT INTO sample VALUES(3,"OOTA",27)')

# 設定を確定して閉じる
conn.commit()
cur.close()
conn.close()

実行するSQL文が異なるだけで、テーブル作成時の手順と同じですね。 ちなみに、タプルのリスト形式のデータを使ってデータ登録することもできます。この場合はデータ設定部分が以下の様になります。

# データを設定(1行で書く場合はタプルのリストとなる)
datalist = [(1,"TANAKA",25),(2,"YAMADA",30),(3,"OOTA",27)]
cur.executemany('INSERT INTO sample values(?,?,?)',datalist)

この方法であれば、一度にたくさんのデータを登録できます。

データの読み込み

登録したデータを読み込んでみましょう。SQLのSELECT文を使えば条件を指定して読み込めますね。

conn = sqlite3.connect(dbname)
cur = conn.cursor()

# SQLで読み込む
for row in cur.execute('SELECT * FROM sample WHERE age > 25'):
    print(row)

# データベースを閉じる
cur.close()
conn.close()

cursorオブジェクトはイテレーターです。読み込んだ結果はタプル形式で返されます。

(2, 'YAMADA', 30)
(3, 'OOTA', 27)

cursorオブジェクトのfetchall関数を使用すると、結果をまとめて取得できます。fetchとは「とってくる」、「もってくる」という意味です。

# fetchallを使って表示
cur.execute('SELECT * FROM sample WHERE age > 25')
print(cur.fetchall())

結果はタプルのリストで返されます。

[(2, 'YAMADA', 30), (3, 'OOTA', 27)]

次回はトランザクション

いかがでしょうか。Pythonから使ことができると色々可能性が広がります。次回はトランザクションです。トランザクションはデータベース管理システム重要な機能なのですが、どんな機能なのでしょうか?お楽しみに!!

hirocom777.hatenadiary.org

SQLite学習記事のまとめですはこちらから