パイソンで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
でテストデータを自動挿入します。