パイソン(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インジェクションという攻撃に対して有効な手段とされています。
今回のコードの
cur.execute('INSERT INTO users (name, money) VALUES (?, ?)', ('次郎', 150))
の実行時点ではデータベースに値は挿入されておらず、
conn.commit()
のコミットという処理が実行された時に始めてデータベースに値が挿入されます。
この処理をトランザクションと呼び、データベースの操作で重要な考え方になりますが、この場では詳細には触れません。
ターミナルからSQLite3を起動しデータベースファイルを直接読み込んで、パイソンから挿入したデータがあるか確認してみましょう。