パイソンでgimeiでSQLite3のRDB用のテストデータを用意してみる

パイソンでgimeiでSQLite3のテストデータを用意してみるで作成したコードを改修してRDB(リレーショナルデータベース)用のテストデータを用意してみます。


今回のテストデータは

CREATE TABLE users (
	id INTEGER PRIMARY KEY AUTOINCREMENT,
	name VARCHAR
);

CREATE TABLE ledger (
	user_id INTEGER NOT NULL,
	amount INTEGER NOT NULL,
	created_at DATETIME DEFAULT (DATETIME('now', 'localtime'))
);

のテーブルの定義を行っているledger.sqlite3に挿入することにします。


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

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

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

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

for i in range(100):
␣␣␣␣# ランダムな名前の生成
␣␣␣␣first_name = Gimei().name.first.kanji

␣␣␣␣# データの取得
␣␣␣␣cur.execute('INSERT INTO users (name) VALUES (?)', (first_name, ))

␣␣␣␣# 直前に挿入されたIDを取得
␣␣␣␣new_id = cur.lastrowid

␣␣␣␣for j in range(100):
␣␣␣␣␣␣␣␣amount = random.randint(10, 10000)
␣␣␣␣␣␣␣␣cur.execute('INSERT INTO ledger (user_id, amount) VALUES (?, ?)', (new_id, amount))

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

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

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


今回のコードで重要になる箇所は、usersテーブルにダミーのユーザーを登録した直後でダミーユーザーに割り振られた id を取得し、その id を使って、ledgerテーブルにデータを挿入するという点です。


この処理により、usersテーブルとledgerテーブルで関連性を持たせる事が出来るようになります。


パイソンでgimeiでSQLite3のテストデータを用意してみるで用意しました gimei 関数を使って、

$ gimei sql.py

でテストデータを自動挿入します。

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

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