SQLiteを学んでいこうという連載の21回目です。前回の記事はこちらになります。
前回は、トリガー機能の解説でした。トリガー機能をうまく利用できれば、信頼性の高いシステムが構築できそうです。
今回は趣向を変えて、PythonからSQLiteを使ってみようと思います。
Pythonで使う
この連載の初回でもお話ししましたが、この連載はAnaconda経由でインストールされたSQLiteを中心に書いています。そして、SQLiteはPythonから呼び出して使うことができます。どのようして使うかというと、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」を使えば良かったんですよね。PythonでSQL文を実行するには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から使ことができると色々可能性が広がります。次回はトランザクションです。トランザクションはデータベース管理システム重要な機能なのですが、どんな機能なのでしょうか?お楽しみに!!