第117回医師国家試験問題の A をデータベース化しています。
問題文・選択肢・解答と別々のテーブルに記録してきましたが、アプリを作成するのであればテーブルを1つにした方が多分使いやすいと思います。
3つのテーブルを1つにするSQL
phpmyadmin 上で以下のような SQL を実行するとテーブルを一つにすることができます。
-- 117A テーブルが存在する場合は削除
DROP TABLE IF EXISTS 117A;
-- 117A テーブルを作成
CREATE TABLE 117A (
id INT AUTO_INCREMENT PRIMARY KEY,
qnum VARCHAR(255),
question VARCHAR(1000),
a VARCHAR(255),
b VARCHAR(255),
c VARCHAR(255),
d VARCHAR(255),
e VARCHAR(255),
f VARCHAR(255),
g VARCHAR(255),
h VARCHAR(255),
answer VARCHAR(255) -- answer カラムを追加
);
-- 117A_c、117A_q、117A_a テーブルからデータを挿入
INSERT INTO 117A (qnum, question, a, b, c, d, e, f, g, h, answer)
SELECT
117A_c.qnum,
117A_q.question,
117A_c.a,
117A_c.b,
117A_c.c,
117A_c.d,
117A_c.e,
117A_c.f,
117A_c.g,
117A_c.h,
117A_a.answer
FROM 117A_c
INNER JOIN 117A_q ON 117A_c.qnum = 117A_q.qnum
LEFT JOIN 117A_a ON 117A_c.qnum = 117A_a.qnum; -- LEFT JOIN を使用して、answerが存在しない場合も挿入する
python で SQL 実行
pythonで実行します。
import pymysql
# データベース接続の設定
db_config = {
'host': 'localhost',
'user': 'user',
'password': 'pass',
'database': 'ntexdoc',
'charset': 'utf8mb4', # 文字コードの指定 (必要に応じて変更)
'cursorclass': pymysql.cursors.DictCursor # 結果を辞書形式で取得するように指定
}
# データベースに接続
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 1つ目のクエリを実行
cursor.execute("DROP TABLE IF EXISTS 117A;")
# 2つ目のクエリを実行
cursor.execute("""
CREATE TABLE 117A (
id INT AUTO_INCREMENT PRIMARY KEY,
qnum VARCHAR(255),
question VARCHAR(1000),
a VARCHAR(255),
b VARCHAR(255),
c VARCHAR(255),
d VARCHAR(255),
e VARCHAR(255),
f VARCHAR(255),
g VARCHAR(255),
h VARCHAR(255),
answer VARCHAR(255)
);
""")
# 3つ目のクエリを実行
cursor.execute("""
INSERT INTO 117A (qnum, question, a, b, c, d, e, f, g, h, answer)
SELECT
117A_c.qnum,
117A_q.question,
117A_c.a,
117A_c.b,
117A_c.c,
117A_c.d,
117A_c.e,
117A_c.f,
117A_c.g,
117A_c.h,
117A_a.answer
FROM 117A_c
INNER JOIN 117A_q ON 117A_c.qnum = 117A_q.qnum
LEFT JOIN 117A_a ON 117A_c.qnum = 117A_a.qnum;
""")
# 変更を確定
conn.commit()
# 接続を閉じる
cursor.close()
conn.close()