明けましておめでとうございます。少し更新が止まっていましたが、また再開しようと思います。
去年は私にとっては色々変化の大きい年でした。自分の勉強不足なども痛感し、今年はより一層努力しなければと思います。
さて、本日は Python で SQLite を使ってみようと思います。GIS とはあまり関係ないと思われるかもしれませんが、GIS データを扱うにあたってデータベースは避けては通れない道かと思います。今回だけではなく、今後もデータベースについて色々紹介できればと思います。
SQLite とは
SQLiteは、パブリックドメインの軽量な関係データベース管理システム のことですね(SQLite - Wikipedia)。簡単に言うと、SQLSERVER や Oracle などと異なり、ファイルベースで簡単に扱えるデータベース、といった感じでしょうか。
使用するライブラリ
Python 標準ライブラリである sqlite3 を使用します。
SQLite のGUI 管理ツール
SQLite のGUI 管理ツールですが、DB Browser for SQLite を使用します。
関連エントリー
以下のエントリーで Python で SQLSERVER の操作について紹介していますので、興味がありましたらぜひ読んでみてください。
環境
Windows10 64bit
Python 3.6.6
DB Browser for SQLite 3.11.2
sqlite3 の使用方法
sqlite3 を使用して以下のような操作をするための方法を書いてみました。
- データベースの作成/接続
- テーブルの作成
- 挿入
- 更新
- 削除
- 検索
データベースの作成/接続
対象のSQLiteのファイル(sample_data.db)がなかったら作成して、あったら接続します。
# -*- coding: utf-8 -*- import sqlite3 # sample_data.db がなかったら作成、あったら接続 db_path = "D:\data\SQLite\sample_data.db" conn = sqlite3.connect(db_path) conn.close()
実行前
実行後
sample_data.db が作成されたことがわかります。sample_data.db を DB Browser for SQLite で読み込んだ結果が以下になります。
テーブルの作成
「SAMPLE」というテーブルを作成するサンプルです。コネクションを取得して、作成した SQL を実行するだけですね。
# -*- coding: utf-8 -*- import sqlite3 db_path = "D:\data\SQLite\sample_data.db" conn = sqlite3.connect(db_path) def create_table(): sql = '''CREATE TABLE IF NOT EXISTS SAMPLE (ID INTEGER PRIMARY KEY, TEST1 TEXT, TEST2 TEXT, TEST3 TEXT)''' conn.execute(sql) conn.commit() conn.close() create_table()
以下のような結果になりました。カラムもしっかり作成されていることがわかります。
挿入
テーブルの作成と基本的には一緒で SQL をINSERT 文にするだけですね。
# -*- coding: utf-8 -*- import sqlite3 db_path = "D:\data\SQLite\sample_data.db" conn = sqlite3.connect(db_path) def insert_record(): sql = "INSERT INTO SAMPLE VALUES (1, 'あ', 'い', 'う')" conn.execute(sql) sql = "INSERT INTO SAMPLE VALUES (2, 'てすと1', 'てすと2', 'てすと3')" conn.execute(sql) sql = "INSERT INTO SAMPLE VALUES (3, '12345', '22222', '55555')" conn.execute(sql) conn.commit() conn.close() insert_record()
想定通りの結果になりました。
更新
こちらも SQL を UPDATE 文に変えただけですね。
# -*- coding: utf-8 -*- import sqlite3 db_path = "D:\data\SQLite\sample_data.db" conn = sqlite3.connect(db_path) def update_record(): sql = "UPDATE SAMPLE SET TEST1 = 'か' WHERE ID = 1" conn.execute(sql) conn.commit() conn.close() update_record()
しっかり UPDATE されていることがわかります。
削除
こちらも SQL を DELETE 文に変えただけですね。
# -*- coding: utf-8 -*- import sqlite3 db_path = "D:\data\SQLite\sample_data.db" conn = sqlite3.connect(db_path) def delete_record(): sql = "DELETE FROM SAMPLE WHERE ID = 3" conn.execute(sql) conn.commit() conn.close() delete_record()
ID = 3 のレコードが削除されていることがわかります。
検索
最後に検索ですが、こちらは他のとは少し異なりますのでご注意ください。 SQL を SELECT 文に変えて、そのあと execute した結果をループします。
# -*- coding: utf-8 -*- import sqlite3 db_path = "D:\data\SQLite\sample_data.db" conn = sqlite3.connect(db_path) def select_record(): sql = "SELECT * FROM SAMPLE WHERE ID = 2" for row in conn.execute(sql): print(row) select_record()
このように SELECT した結果を取得することができます。
Python での SQLite の操作について一通り紹介しましたが、すごく簡単にできることがわかりました。私は業務で SQLite はあまり使ったことがないのですが、おそらく世間的にはたくさん使われているデータベースだと思います。やはりファイルベースで扱えるというメリットが人気の秘密でしょうか。
本日は以上です。