GIS奮闘記

元GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

Python で SQLite を使ってみよう!

明けましておめでとうございます。少し更新が止まっていましたが、また再開しようと思います。

去年は私にとっては色々変化の大きい年でした。自分の勉強不足なども痛感し、今年はより一層努力しなければと思います。

さて、本日は Python で SQLite を使ってみようと思います。GIS とはあまり関係ないと思われるかもしれませんが、GIS データを扱うにあたってデータベースは避けては通れない道かと思います。今回だけではなく、今後もデータベースについて色々紹介できればと思います。

SQLite とは

SQLiteは、パブリックドメインの軽量な関係データベース管理システム のことですね(SQLite - Wikipedia)。簡単に言うと、SQLSERVER や Oracle などと異なり、ファイルベースで簡単に扱えるデータベース、といった感じでしょうか。

使用するライブラリ

Python 標準ライブラリである sqlite3 を使用します。

SQLite のGUI 管理ツール

SQLite のGUI 管理ツールですが、DB Browser for SQLite を使用します。

f:id:sanvarie:20200113100352p:plain

関連エントリー

以下のエントリーで Python で SQLSERVER の操作について紹介していますので、興味がありましたらぜひ読んでみてください。

www.gis-py.com

環境

Windows10 64bit
Python 3.6.6
DB Browser for SQLite 3.11.2

sqlite3 の使用方法

sqlite3 を使用して以下のような操作をするための方法を書いてみました。

  1. データベースの作成/接続
  2. テーブルの作成
  3. 挿入
  4. 更新
  5. 削除
  6. 検索

データベースの作成/接続

対象の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()

実行前

f:id:sanvarie:20200113102206p:plain

実行後

f:id:sanvarie:20200113102229p:plain

sample_data.db が作成されたことがわかります。sample_data.db を DB Browser for SQLite で読み込んだ結果が以下になります。

f:id:sanvarie:20200113102352p:plain

テーブルの作成

「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()

以下のような結果になりました。カラムもしっかり作成されていることがわかります。 f:id:sanvarie:20200113103215p:plain

挿入

テーブルの作成と基本的には一緒で 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()

想定通りの結果になりました。 f:id:sanvarie:20200113125244p:plain

更新

こちらも 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 されていることがわかります。 f:id:sanvarie:20200113125551p:plain

削除

こちらも 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 のレコードが削除されていることがわかります。 f:id:sanvarie:20200113125731p:plain

検索

最後に検索ですが、こちらは他のとは少し異なりますのでご注意ください。 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 した結果を取得することができます。 f:id:sanvarie:20200113130200p:plain

Python での SQLite の操作について一通り紹介しましたが、すごく簡単にできることがわかりました。私は業務で SQLite はあまり使ったことがないのですが、おそらく世間的にはたくさん使われているデータベースだと思います。やはりファイルベースで扱えるというメリットが人気の秘密でしょうか。

本日は以上です。