パイソンでSQLite3を使ってみる

パイソン(Python3)でSQLite3のデータベースに保存されているデータを出力してみます。

データベースはSQLite3でデータベース用のファイルを作成するまでの内容で作成しましたsample.sqlite3を利用します。


sample.sqlite3のパスが/path/to/dir/sample.sqlite3で話を進めます。

# sample.sqlite3があるディレクトリまで移動
$ cd /path/to/dir
$ micro sql.py
import sqlite3

# Python3からSQLite3のデータベースに接続
conn = sqlite3.connect("sample.sqlite3")

# SQLite3のデータベースを操作する為のカーソルを作成
cur = conn.cursor()

# データの取得
cur.execute("SELECT * FROM users")
rows = cur.fetchall()

# 取得したデータを一行ずつ確認
for row in rows:
␣␣␣␣print(row)

# 接続を閉じる
conn.close()

※␣は半角スペース1個分


パイソンでのSQLite3の操作はデータベースのファイルを読み込むことでデータベースと接続し、クエリの実行をした後にデータベースの接続を閉じるという流れになります。




パイソンからデータベースに値を挿入してみます。

import sqlite3

# Python3からSQLite3のデータベースに接続
conn = sqlite3.connect("sample.sqlite3")

# SQLite3のデータベースを操作する為のカーソルを作成
cur = conn.cursor()

# データの挿入
cur.execute('INSERT INTO users (name, money) VALUES (?, ?)', ('次郎', 150))

# 下記コードでコミットという処理を行うことでデータがインサートされる
conn.commit()

# 接続を閉じる
conn.close()

パイソンからSQLite3のデータベースにデータを挿入する際、

cur.execute('INSERT INTO users (name, money) VALUES (?, ?)', ('次郎', 150))

のようにVALUES句が

VALUES (?, ?)

のように挿入した値の箇所が ? になっています。


executeの第二引数で

('次郎', 150)

のようにVALUES句の ? の数と対応して値の指定があります。


この書き方をプレースホルダと呼びます。

詳細は記載しませんが、プレースホルダはSQLインジェクションという攻撃に対して有効な手段とされています。

SQLインジェクション - Wikipedia




今回のコードの

cur.execute('INSERT INTO users (name, money) VALUES (?, ?)', ('次郎', 150))

の実行時点ではデータベースに値は挿入されておらず、

conn.commit()

のコミットという処理が実行された時に始めてデータベースに値が挿入されます。


この処理をトランザクションと呼び、データベースの操作で重要な考え方になりますが、この場では詳細には触れません。

トランザクション処理 - Wikipedia


ターミナルからSQLite3を起動しデータベースファイルを直接読み込んで、パイソンから挿入したデータがあるか確認してみましょう。

京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。